Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案

前文:Spring Security OAuth2——自定义OAuth2第三方登录(Gitee) 

Maven

主要

        org.springframework.bootspring-boot-starter-securityorg.springframework.bootspring-boot-starter-oauth2-client

解决方案

实体类

org.springframework.security.core.userdetails.UserDetailsService

/***  服务实现类** @author ShenTuZhiGang* @version 1.0.0* @date 2021-02-15 15:05*/
@Service
public class UserServiceImpl implements UserDetailsService {private final UserMapper userMapper;private final UserRoleMapper userRoleMapper;public UserServiceImpl(UserMapper userMapper, UserRoleMapper userRoleMapperr) {this.userMapper = userMapper;this.userRoleMapper = userRoleMapper;}/*** 加载指定用户* @param username 用户名* @return Spring Security UserDetails* @throws UsernameNotFoundException 用户不存在*/@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {User user =  userMapper.selectUserByUserName(username);if(user == null){throw new UsernameNotFoundException("账号不存在");}UsernamePasswordAuthenticationUser authenticationUser = new UsernamePasswordAuthenticationUser();BeanUtils.copyProperties(user,authenticationUser);authenticationUser.setRoles(userRoleMapper.listRoleByUid(user.getId()));return authenticationUser;}
}

org.springframework.security.oauth2.client.userinfo.OAuth2UserService

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-03-16 02:13*/
@Service
public class CustomOAuth2UserService extends CustomUserTypesOAuth2UserService {@Autowiredprivate IUserService iUserService;@Autowiredprivate IRoleService iRoleService;public CustomOAuth2UserService(Map> customUserTypes) {super(customUserTypes);}@Overridepublic OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {OAuth2User oauth2User = super.loadUser(userRequest);User user =  iUserService.getById(1);if(user == null){user = iUserService.registerUser(oauth2User.getName(),"");}OAuth2AuthenticationUser authenticationUser = new OAuth2AuthenticationUser();BeanUtils.copyProperties(user,authenticationUser);authenticationUser.setSource(oauth2User);authenticationUser.setRoles(iRoleService.listRoleByUid(user.getId()));return authenticationUser;}
}

配置

/*** @author ShenTuZhiGang* @version 1.0.0* @date 2021-03-16 02:27*/
@Configuration
public class CustomOAuth2Config {@Beanpublic Map> customOAuth2UserTypes(){Map> map = new HashMap<>();map.put("github", GithubOAuth2User.class);map.put("gitee", GiteeOAuth2User.class);return map;}
}

WebSecurityConfigurerAdapter

    @Overrideprotected void configure(HttpSecurity http)throws Exception{// OAuth2登录http.oauth2Login().redirectionEndpoint().baseUri("/login/oauth2/code/*").and().userInfoEndpoint().customUserType(GiteeOAuth2User.class,"gitee").and().permitAll()}

application.yml 

spring:# Security Configsecurity:oauth2:client:registration:gitee:provider: giteeclient-id: {mm}client-secret: {mm}authorization-grant-type: authorization_coderedirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'scope: user_infoclient-name: Giteeclient-alias: giteeprovider:gitee:authorization-uri: https://gitee.com/oauth/authorizetoken-uri: https://gitee.com/oauth/tokenuser-name-attribute: iduser-info-uri: https://gitee.com/api/v5/user

 

参考文章

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部