接上文实现SpringSecurity,拦截器的实现

news/2024/9/29 17:56:35

实现拦截器

有图片可知,在上篇文章我们重写了UserDetailsManager,现在我们来进行之后的操作
在UserDetailsManager中我们可以调动数据库去进行一个账号密码的校验
之后我们这样设置拦截器进行一个token获取存储在usernamePasswordAuthenticationFilter这一层中,
有,则存储在SecurityContextHolder.getContext()中供接下来的调用,没有就放行

@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {@Autowiredprivate RedisCache redisCache;@Overrideprotected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {String token = httpServletRequest.getHeader("token");if(!StringUtils.hasText(token)){filterChain.doFilter(httpServletRequest,httpServletResponse);return;}String userId="";try {Claims claims = JwtUtil.parseJWT(token);userId = claims.getSubject();} catch (Exception e) {throw new RuntimeException(e);}LoginUser cacheObject = redisCache.getCacheObject("login:" + userId);if(Objects.nonNull(cacheObject)){UsernamePasswordAuthenticationToken token1=new UsernamePasswordAuthenticationToken(cacheObject,null,null);SecurityContextHolder.getContext().setAuthentication(token1);}filterChain.doFilter(httpServletRequest,httpServletResponse);}
}

启用拦截器


@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate  JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;@Beanpublic BCryptPasswordEncoder passwordEncoder(){return new  BCryptPasswordEncoder();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http//关闭csrf.csrf().disable()//不通过Session获取SecurityContext.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()// 对于登录接口 允许匿名访问.antMatchers("/user/login").anonymous()// 除上面外的所有请求全部需要鉴权认证.anyRequest().authenticated();http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);}@Bean@Overridepublic AuthenticationManager authenticationManagerBean() throws Exception {return super.authenticationManagerBean();}
}```,
注意:
1.不用去想着token没有的情况,由以上逻辑可以看出来,我们将token获取后会存入 SecurityContextHolder中,之后的内置拦截器会检测是否有token,没有就报错,不用自己设置监测
2.其次,一定要注意,在拦截器中放生login接口
3.登录前UsernamePasswordAuthenticationToken存的是账号密码,登录后转入 SecurityContextHolder时,存的是对象

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

error: index-pack died of signal 15

使用Jenkins从gitlab拉取代码构建时,遇到报错error: index-pack died of signal 15一个常见的原因是仓库过大或网络不佳引起的超时,以下配置可解决。 配置工程,为源码管理部分增加Additional Behaviours,选择“高级的克隆行为”,把克隆和拉取操作的超时时间(分钟)设置为…

CentOS 7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.2

CentOS 7.9安装ElasticSearch7.14.0、ElasticSearch-Head、Kibana、Node14.18.21.安装文件1. elasticsearch-7.14.0-linux-x86 64.tar.gz 2. elasticsearch-head-master.zip 3. jdk-11 linux-x64 bin.tar.gz 4. kibana-7.14.0-linux-x86 64.tar.gz 5. node-v14.18.2-linux-x64.…

「土地那些事儿」我国土地资源的特点:多样而丰富

土地,作为自然资源的核心,承载着国家的经济发展、社会进步和生态安全。我国作为世界上人口最多、面积第三大的国家,土地资源的特点尤为显著。站在这片古老而又充满活力的土地上,我们不禁会思考:我国的土地资源有哪些独特之处?今天,就让我们一起走进这片广袤的土地,探寻…

三维立体自然资源“一张图”

随着信息技术的发展,自然资源管理迎来了新的机遇与挑战。在众多技术中,“三维立体自然资源‘一张图’”的概念尤为引人注目。它不仅代表了地理信息科学领域的最新成果,也为自然资源的有效管理和可持续利用提供了强有力的支持。本文将探讨这一概念的内涵及其在自然资源管理中…

从Anaconda到PyTorch到训练Yolo——Windows系统

1、Anaconda conda能管理不同的开发编译环境,互补干涉影响。 Anaconda和Miniconda是conda的工具,前者带界面(大而全),后者只有命令行窗口(小而精)。作为初学,建议安装Anaconda 1.1 安装Anaconda 下载 Download Anaconda Distribution | Anaconda ,安装到D盘,其他默认…

9月28日,工信部人才交流中心CUUG-PGCA/PGCP/PGCM认证考试完成!

2024年9月28日,由工业和信息化部人才交流中心主办,北京神脑资讯技术有限公司承办的PostgreSQL管理员岗位能力认证考试(PGCP中级/PGCM高级)顺利完成。 中级PG认证专家:PGCP(PostgreSQL Certified Professional),是对PostgreSQL数据库技术能力的一种认可,达到了专家级别…

设置GRUB密码

通过在GRUB配置中设置密码,系统在启动时会在显示GRUB菜单之前提示用户输入密码,只有输入正确的密码后,用户才能看到并修改启动选项。 1、以 root 用户身份执行 grub2-setpassword 命令。2、检查 /boot/grub2/user.cfg 文件,其包含哈希格式的密码。3、配置GRUB菜单作者:杨灏…

模糊查询用逗号分隔开的字段

业务:一个sys_dept部门表中,有一个字段ancestors是用逗号分隔开的id。 想模糊查询这个字段。 如果用普通的like的话。 select * from sys_dept where ancestors like %1%实现不了我们想要的效果。 mysql 可以用FIND_IN_SET()这个函数来协助。 列:SELECT * FROM sys_dept …