当前位置:网站首页>11-security认证.md
11-security认证.md
2022-08-03 00:34:00 【张 邵】
我们需要自定义一个过滤器,这个过滤器会去获取请求头中的token,对token进行解析取出其中的userid。
使用userid去redis中获取对应的LoginUser对象。
然后封装Authentication对象存入SecurityContextHolder
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Autowired
private RedisCache redisCache;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
//获取token
String token = request.getHeader("token");
if (!StringUtils.hasText(token)) {
//放行
filterChain.doFilter(request, response);
return;
}
//解析token
String userid;
try {
Claims claims = JwtUtil.parseJWT(token);
userid = claims.getSubject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("token非法");
}
//从redis中获取用户信息
String redisKey = "login:" + userid;
LoginUser loginUser = redisCache.getCacheObject(redisKey);
if(Objects.isNull(loginUser)){
throw new RuntimeException("用户未登录");
}
//存入SecurityContextHolder
//TODO 获取权限信息封装到Authentication中
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(loginUser,null,null);
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
//放行
filterChain.doFilter(request, response);
}
}
/** * @Author 三更 B站: https://space.bilibili.com/663528522 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Autowired
JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//关闭csrf
.csrf().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
// 对于登录接口 允许匿名访问
.antMatchers("/user/login").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
//把token校验过滤器添加到过滤器链中
http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
边栏推荐
- 麒麟信安邀您抢先看 | openEuler 志高远,开源汇智创未来-开放原子全球开源峰会欧拉分论坛最详细议程出炉
- 2022 Shandong International Youth Eye Health Industry Exhibition, Vision Health Exhibition, Optometry Exhibition
- 一个人的精力
- 全栈----跨域
- 年近30 ,4月无情被辞,想给划水的兄弟提个醒...
- Day117. Shangyitong: Generate registered order module
- v-if条件判断及v-show
- 做快乐的事情
- 封装和练习题目
- [NCTF2019]SQLi-1||SQL注入
猜你喜欢
【问题征集】向 iPod 之父、iPhone 联合设计者、Google Nest 创始人 Tony Fadell 提问啦
Jenkins汉化设置
OpenWRT设置ipv6网络
一套开源的可快速搭建自己的物联网/智能家居系统源码
【飞控开发高级教程1】疯壳·开源编队无人机-飞控整机代码走读、编译与烧写
优秀论文以及思路分析01
暴力递归到动态规划 07(516. 最长回文子序列)
Auto.js special positioning control method cannot perform blocking operations on the ui thread, please use setTimeout instead
高并发基石:多线程、守护线程、线程安全、线程同步、互斥锁,一文扫尽!...
【TypeScript笔记】01 - TS初体验 && TS常用类型
随机推荐
8 个常用的 Wireshark 使用技巧,一看就会
谷歌 Chrome 浏览器 104 正式版发布:加快网页加载,蓝牙 API 改进
7.31
【飞控开发高级教程1】疯壳·开源编队无人机-飞控整机代码走读、编译与烧写
【Leetcode】305.岛屿数量II(困难)
【TypeScript笔记】01 - TS初体验 && TS常用类型
2022年8月2日——使用idea搭建servlet+jsp项目
并发模型和I/O模型介绍
Heartwarming AI Review (1)
年近30 ,4月无情被辞,想给划水的兄弟提个醒...
风电场运营实践 | 麒麟信安助力国华投资山东公司集控中心实现安全智慧化运营
向往的生活
九零后程序员心声:互联网的同行们,别卷了,再卷人都卷没了
SAP ABAP OData 服务如何支持修改(Update)操作试读版
alibaba数据同步组件canal的实践整理
暴力递归到动态规划 06 (剑指 Offer II 095. 最长公共子序列)
php提示Array to string conversion
【Autosar RTM】
为了面试阿里,熬夜肝完这份软件测试笔记后,Offer终于到手了
php一维数组合并