首页 > 基础资料 博客日记
Java Spring Security OAuth2.0 通过token 获取用户信息(ID)
2023-08-26 17:49:23基础资料围观594次
Java资料网推荐Java Spring Security OAuth2.0 通过token 获取用户信息(ID)这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣
Spring OAuth2.0 通过token 获取用户信息--解密方式
Authentication(身份认证)
通过获取Spring 身份认证(Authentication)来获取用户信息,这种方式必须
①请求头中携带Authorization token
或
②请求参数中携带access_token =token 参数
才能有效获取用户信息
String userId;
//获取身份验证
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication instanceof OAuth2Authentication) {
OAuth2Authentication oAuth2Authentication = (OAuth2Authentication)authentication;
Object details = oAuth2Authentication.getUserAuthentication().getDetails();
if (details == null) {
log.error("获取用户信息失败!");
throw new UserException("获取用户信息失败!");
} else {
try {
//获取用户详细信息
Map<String, ?> userInfo = (Map)details;
userId= userInfo == null ? null : String.valueOf(userInfo.get("user_id"));
} catch (Exception var5) {
log.error(var5.getMessage());
throw new ClassCastException("类型转换异常");
}
}
}
JwtHelper(token解密)
1)那我如果不使用常规传递模式,而使用自定义token参数名、或者其他渠道获取的token;
2)需要使用JwtHelper 进行解密;
示例代码中 使用的请求参数名就是 T,通过T 参数获取token 并且解密
//获取请求request
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//获取token管理服务
BearerTokenExtractor bearerTokenExtractor = new BearerTokenExtractor();
//通过token管理提取token
Authentication extract = bearerTokenExtractor.extract(request);
Object principal = extract == null ? null : extract.getPrincipal() ;
//获取token
String token;
if (Objects.isNull(extract)){
token = request.getParameter("T"); //自定义参数token名称
}else {
token = String.valueOf(extract.getPrincipal());
}
//解析token
Jwt jwt = JwtHelper.decode(token);
String claimsStr = jwt.getClaims();
Map<String, Object> claims = JsonParserFactory.create().parseMap(claimsStr);
String userId = String.valueOf(claims.get("user_id"));
文章来源:https://blog.csdn.net/xiaobai_notexc/article/details/130585540
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?