这篇文章主要为大家展示了“spring-boot集成spring-security的oauth2如何实现GitHub登录网站”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring-boot集
这篇文章主要为大家展示了“spring-boot集成spring-security的oauth2如何实现GitHub登录网站”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“spring-boot集成spring-security的oauth2如何实现github登录网站”这篇文章吧。
引入依赖
<dependency> <groupId>org.springframework.security.oauth</groupId> <artifactId>spring-security-oauth3</artifactId></dependency>
添加配置
security: oauth3: client: client-id: client-secret: accessTokenUri: https://github.com/login/oauth/access_token userAuthorizationUri: Https://github.com/login/oauth/authorize clientAuthenticationScheme: fORM reGIStered-redirect-uri: ${site.baseUrl}/github_login use-current-uri: false resource: userInfoUri: https://api.github.com/user sso: login-path: /github_login
在启动类上加上注解 @EnableOAuth3Sso
一个注解搞定一切
注意:
github上的申请应用,这里不多说,要注意的是github上要填的回调地址是跟上面配置的 registered-redirect-uri
一样的
加上 @EnableOAuth3Sso
注解后,原来系统里配置的 /login
就默认成了oauth3登录的路由了,这里通过配置 security.oauth3.sso.login-path
更改了
保存登录用户
注解 @EnableOAuth3Sso
登录成功了,会把用户信息写入到内存,还是跟session生命周期一样的,session没了,它就没了, 所以既然登录成功了,就要保存到数据库里,而且也可以跟本地用户做关联,登录成功了,直接读取用户的权限信息
保存用户登录信息,只要实现一个接口就可以了,在oauth3授权成功了,它会回调这个接口的,上代码
这个类放哪都可以,只要能被spring管理就行
@Beanpublic PrincipalExtractor principalExtractor() { return map -> { String login = map.get("login").toString();//github的登录名 GithubUser githubUser = githubUserService.findByLogin(login); User user; if (githubUser == null) { githubUser = new GithubUser(); githubUser = githubUserService.convert(map, githubUser); //创建一个本地用户 user = userService.findByUsername(login); if (user == null) { user = new User(); user.setUsername(login); } else { user.setUsername(login + "_" + githubUser.getGithubId()); } user.setEmail(githubUser.getEmail()); user.setBio(githubUser.getBio()); user.setUrl(githubUser.gethtml_url()); user.setPassword(new BCryptPassWordEncoder().encode(StrUtil.randomString(16))); user.setInTime(new Date()); user.setBlock(false); user.setToken(UUID.randomUUID().toString()); user.setAvatar(githubUser.getAvatar_url()); user.setAttempts(0); user.setScore(2000);// first register score 2000 user.setSpaceSize(siteConfig.getUserUploadSpaceSize()); user.setGithubUser(githubUser); // set user's role Role role = roleService.findById(3); // normal user Set roles = new HashSet(); roles.add(role); user.setRoles(roles); userService.save(user); } else { githubUser = githubUserService.convert(map, githubUser); user = githubUser.getUser(); githubUserService.save(githubUser); } //加载用户的权限信息 return yiiuUserDetailService.loadUserByUsername(user.getUsername()); };}
上面 yiiuUserDetailService.loadUserByUsername(user.getUsername())
这段代码见下面,就是spring-security的加载用户权限代码
@Servicepublic class YiiuUserDetailService implements UserDetailsService { private Logger log = Logger.getLogger(YiiuUserDetailService.class); @Autowired private UserService userService; @Autowired private PermissionService permissionService; public UserDetails loadUserByUsername(String username) { User user = userService.findByUsername(username); if (user != null) { List<Permission> permissions = permissionService.findByAdminUserId(user.getId()); List<GrantedAuthority> grantedAuthorities = new ArrayList<>(); for (Permission permission : permissions) { GrantedAuthority grantedAuthority = new SimpleGrantedAuthority(permission.getName()); grantedAuthorities.add(grantedAuthority); } return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(), true, true, true, !user.isBlock(), grantedAuthorities); } else { log.info("用户" + username + " 不存在"); throw new UsernameNotFoundException("用户名或密码不正确"); } }}
以上是“spring-boot集成spring-security的oauth2如何实现github登录网站”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!
--结束END--
本文标题: spring-boot集成spring-security的oauth2如何实现github登录网站
本文链接: https://lsjlt.com/news/222025.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0