springsecurity中使access_token获取用户信息(tokenStore)

public class TokenUtil {/*** 根据token获取用户名**<hr>* @author hanjidong* @date 2020年12月16日 上午10:37:12* @since 0.0.1* @param access_token* @return* String*/public static SyswareUserDetails getUserNameByToken(String access_token) {try {//获取tokensotre对象InMemoryTokenStore tokenStore = (InMemoryTokenStore) SystemContext.getBean("tokenStore");OAuth2AccessToken readAccessToken = tokenStore.readAccessToken(access_token);if(readAccessToken == null){throw new IllegalArgumentException("token无效");}if(readAccessToken.isExpired()){throw new RuntimeException("token已过期");}OAuth2Authentication oAuth2Authentication = null;Field authenticationStore = tokenStore.getClass().getDeclaredField("authenticationStore");authenticationStore.setAccessible(true);Object authenticationStoreObj = authenticationStore.get(tokenStore);if (authenticationStoreObj instanceof ConcurrentHashMap) {ConcurrentHashMap<String, OAuth2Authentication> nticationStoreObjMap = (ConcurrentHashMap<String, OAuth2Authentication>) authenticationStoreObj;oAuth2Authentication = nticationStoreObjMap.get(access_token);}Object principal = oAuth2Authentication.getPrincipal();return (SyswareUserDetails) principal;
//          //获取存储用户名与token的map
//          // 暴力反射获取属性
//          Field declaredField = tokenStore.getClass().getDeclaredField("userNameToAccessTokenStore");
//          // 设置反射时取消Java的访问检查,暴力访问
//          declaredField.setAccessible(true);
//          Object nameObject = declaredField.get(tokenStore);
//          if (nameObject instanceof ConcurrentHashMap) {
//              ConcurrentHashMap<String, Collection<OAuth2AccessToken>> usernameTokenMap = (ConcurrentHashMap<String, Collection<OAuth2AccessToken>>) nameObject;
//              Set<Entry<String, Collection<OAuth2AccessToken>>> entrySet = usernameTokenMap.entrySet();
//              for (Entry<String, Collection<OAuth2AccessToken>> entry : entrySet) {
//                  Collection<OAuth2AccessToken> value = entry.getValue();
//                  for (OAuth2AccessToken oAuth2AccessToken : value) {
//                      if (oAuth2AccessToken.getValue().equals(access_token)) {
//                          return entry.getKey().split(":")[1];
//                      }
//                  }
//              }
//          }} catch (Exception e) {throw new RuntimeException(e.getMessage());}}
}
@Component
public class SystemContext implements ApplicationContextAware{/*** 上下文对象实例*/private static ApplicationContext applicationContext;@SuppressWarnings("static-access")@Autowiredpublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {this.applicationContext = applicationContext;}/*** 获取applicationContext* @return*/public static ApplicationContext getApplicationContext() {return applicationContext;}/*** 通过name获取 Bean.* @param name* @return*/public static Object getBean(String name){return getApplicationContext().getBean(name);}/*** 通过class获取Bean.* @param clazz* @param <T>* @return*/public static <T> T getBean(Class<T> clazz){return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean* @param name* @param clazz* @param <T>* @return*/public static <T> T getBean(String name,Class<T> clazz){return getApplicationContext().getBean(name, clazz);}
}

springsecurity中使access_token获取用户信息(tokenStore)相关推荐

  1. uniapp在小程序中登录,获取用户信息,获取手机号逻辑记录

    这里写目录标题 概述 uniapp小程序的授权描述 授权的详细说明及使用 1.微信小程序通过`uni.login()`方法可以获取到微信提供的`code` 2.通过登录获取的`code`码可以以获取用 ...

  2. 微信公众号开发之授权获取用户信息

    微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...

  3. 微信公众号获取用户信息(新)

    注意:此access_token和基础支持的access_token不同(此access_token相当于用户的token,基础的access_token相当于应用的token) 微信授权的流程: 详 ...

  4. 微信公众号--根据用户opneId获取用户信息

    一.登录微信公众号的测试环境,找到"网页授权获取用户基本信息"点击修改,添加上自己的回调地址域名.测试时可以写IP:端口号,正式环境只支持域名不要写http://或https:// ...

  5. 微信公众号授权(获取用户信息)

    需要的工具: 微信公众号(可以申请,但做开发的,可以申请测试号,申请详细不多说了) 服务器(可以自行购买,我使用的是新浪的sae.) 编辑器(随意,不做推荐) 微信公众号开发文档(地址) !!!!!完 ...

  6. 浙政钉扫一扫获取用户信息

    浙政钉的开发文档和专有钉钉一样:但想通过浙政钉扫一扫需向发浙政钉起申请获取应用信息 这里以专有钉钉为例 1.首先先注册一个专有钉钉账户 专有钉钉开放平台开发文档:https://dg-work.cn/ ...

  7. 小白专用微信公众号网页授权通过code获取用户信息

    新手小编 本人已入坑2年也是通过在哈尔滨图灵云培训学习的Java,且年龄也比较大的码农 目前在北京也是刚刚才接触微信公众号的网页开发所得经验进行跟大家分享 因为代码写的少大多都是无用的重复代码,请大家 ...

  8. 微信小程序一个按钮同时获取用户信息和手机号码

    <view class="login" bindtap='getuserInfo'><button open-type="getPhoneNumber& ...

  9. 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现)

    微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 文章目录 微信公众号网页OAuth2.0授权登录并获取用户信息(SpringBoot实现) 准备工作 开发思路 具体代 ...

最新文章

  1. 1033 To Fill or Not to Fill (25 分)
  2. 自动删除指定文件夹下N天前文件的批处理
  3. 简简单单的正则表单验证练习
  4. 求出100~200之间的素数
  5. Java开发中更多常见的危险信号
  6. Spring4.x(15)---SpringEL-三目运算
  7. Debian 9 Stretch国内常用镜像源
  8. java import的作用_Java技术_Java千百问(0030)_package和import作用是什么
  9. tecplot教程发布
  10. inav是什么意思?
  11. 华为手机刷机功能总结
  12. 【艾特淘】淘宝保证金催缴单在哪里,要怎么交?
  13. python符号或非并列,Python运算符
  14. 保护系统 WinXP故障恢复控制台完全指引
  15. 豆瓣9分+纪录片,每一部都美到窒息......
  16. 电商订单批量导入API接口功能
  17. verification和validation的区别
  18. 好用的图片翻译器有哪些?这3个工具你们不能不知道
  19. c语言循环程序模板,循环结构程序设计C语言程序
  20. 特别有趣的猜数小游戏

热门文章

  1. [李宏毅老师深度学习视频] 机器学习深度学习基本内容【手写笔记】
  2. VantUI(ZanUI)框架使用async-validator进行表单数据校验
  3. 泰克示波器控制scpi,程序读取波形数据并显示
  4. 完整的测试计划包括那些内容
  5. 简述物联网应用中的短距离无线通信
  6. Python 爬虫 使用正则去掉不想要的网页元素
  7. 面试官:如何秒开视频?什么是秒开视频?
  8. 图像二值化后提边缘效果不好?那是你不会用HSV色彩空间
  9. Android,应用apk及源码
  10. HTML实现旋转太极图