国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

使用spring oauth2框架獲取當前登錄用戶信息的實現代碼

瀏覽:57日期:2023-08-26 14:45:17

使用spring oauth2框架做授權鑒定。想獲取當前用戶信息怎么辦?

我們知道spring oauth2是基于spring security的實現的。

spring security可以通過SecurityContextHolder.getContext().getAuthentication().getPrincipal()獲取到當前用戶信息。

而spring oauth2通過SecurityContextHolder.getContext().getAuthentication().getPrincipal()卻只能拿到當前用戶的用戶名。

然而實際開發過程中,我們較常用到的大部分都是用戶的id。

那么怎么通過配置獲取當前用戶的信息呢?

首先我們看下,為什么oauth2通過SecurityContextHolder.getContext().getAuthentication().getPrincipal()獲取到的是用戶名?

我們看下源碼

DefaultUserAuthenticationConverter.java

public Authentication extractAuthentication(Map<String, ?> map) { // userClaimName是靜態常量:username if (map.containsKey(userClaimName)) { Object principal = map.get(userClaimName); Collection<? extends GrantedAuthority> authorities = getAuthorities(map); // 原因就是這里。如果userDetailsService為空,返回的就是用戶名。 if (userDetailsService != null) { UserDetails user = userDetailsService.loadUserByUsername((String) map.get(userClaimName)); authorities = user.getAuthorities(); principal = user; } return new UsernamePasswordAuthenticationToken(principal, 'N/A', authorities); } return null;}

那我們就給這個類,設置userDetailsService。

我們看下這個類的調用。

DefaultAccessTokenConverter.java

public class DefaultAccessTokenConverter implements AccessTokenConverter { // 一開始就被初始化好了,所以不能設置userDetailsService private UserAuthenticationConverter userTokenConverter = new DefaultUserAuthenticationConverter(); // 但是提供了setter接口,所以我們要做的就是覆蓋上面的實例。 public void setUserTokenConverter(UserAuthenticationConverter userTokenConverter) { this.userTokenConverter = userTokenConverter; } }

所以如果是使用DefaultAccessTokenConverter的,代碼可以這么寫

@Configuration@EnableAuthorizationServerpublic class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter { @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenStore(tokenStore).authenticationManager(manager).allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST).userDetailsService(userService)// .accessTokenConverter(tokenConverter); DefaultAccessTokenConverter converter = new DefaultAccessTokenConverter(); DefaultUserAuthenticationConverter userAuthenticationConverter= new DefaultUserAuthenticationConverter(); userAuthenticationConverter.setUserDetailsService(userService); converter.setUserTokenConverter(userAuthenticationConverter); endpoints.accessTokenConverter(converter); } }

如果是用jwtConverter的話,可以這么改。

定義一個accessTokenConverter繼承DefaultAccessTokenConverter

public class OauthAccessTokenConverter extends DefaultAccessTokenConverter { public OauthAccessTokenConverter(SecurityUserService userService) { DefaultUserAuthenticationConverter converter = new DefaultUserAuthenticationConverter(); converter.setUserDetailsService(userService); super.setUserTokenConverter(converter); }}

定義一個jwtConverter繼承JwtAccessTokenConver

public class OauthJwtAccessTokenConverter extends JwtAccessTokenConverter { public OauthJwtAccessTokenConverter(SecurityUserService userService) { super.setAccessTokenConverter(new OauthAccessTokenConverter(userService)); }}

注冊bean

@Configurationpublic class TokenConfig { @Bean public TokenStore jwtTokenStore(JwtAccessTokenConverter converter) { return new JwtTokenStore(converter); } @Bean public JwtAccessTokenConverter jwtAccessTokenConverter(SecurityUserService userService) { JwtAccessTokenConverter accessTokenConverter = new OauthJwtAccessTokenConverter(userService); accessTokenConverter.setSigningKey('sign_key'); return accessTokenConverter; }}

Oauth2認證服務

@Configuration@EnableAuthorizationServerpublic class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter { @Autowired private AuthenticationManager manager; @Autowired private SecurityUserService userService; @Autowired private TokenStore tokenStore; @Autowired private JwtAccessTokenConverter tokenConverter; @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.tokenStore(tokenStore).authenticationManager(manager).allowedTokenEndpointRequestMethods(HttpMethod.GET, HttpMethod.POST).userDetailsService(userService).accessTokenConverter(tokenConverter); }}

最后就可以像spring security一樣。

使用SecurityContextHolder.getContext().getAuthentication().getPrincipal()獲取用戶信息了。

到此這篇關于spring oauth2獲取當前登錄用戶信息的文章就介紹到這了,更多相關spring oauth2登錄用戶信息內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 久久久久久中文字幕 | 亚洲精品不卡视频 | 成人免费福利片在线观看 | 一本色道久久综合亚洲精品加 | 全部免费国产潢色一级 | 免费观看成年人网站 | 黄色三级毛片 | 99久久99久久久精品久久 | 欧美日韩亚洲综合久久久 | 免费看美女无遮掩的软件 | 国产成人综合网在线观看 | 岛国片欧美一级毛片 | 黄色三级理论片 | 日本免费一区二区三区视频 | 国产一区二区中文字幕 | 波多野结衣在线免费观看视频 | 国产一成人精品福利网站 | 久久久久99精品成人片三人毛片 | 男人天堂国产 | 五月久久噜噜噜色影 | 成人五级毛片免费播放 | 99爱视频精品免视看 | 在线色网址 | 欧美另类孕交 | 黄色一级网址 | 美国成人免费视频 | 亚洲免费专区 | 超矿碰人人超人人看 | 国内偷拍免费视频 | 欧美成人乱弄视频 | 欧美5g影院天天爽天天看 | 国产精品免费大片 | 久久久一区二区三区 | 日韩欧美一区二区三区久久 | 99久久国产综合精品国 | 天天综合色一区二区三区 | 国产三级精品久久三级国专区 | 久久精品成人欧美大片免费 | 成人一区二区免费中文字幕 | 国产三级在线观看 | 久久精品视屏 |