彻底重写设备校验+深入对springSecurity的了解

之前的设备校验是在所有的页面跳转Controller中加入重复的判断,即使把判断的方法抽取出来了,但还是有大量重复的代码。但是在之前的需求中,我还是这么做了。

这次我为什么要改呢,是因为现在的登录接口不仅要给pc用还要给app用,他俩的登录功能类似,但登录之后各自都有个设备校验,pc端是校验登录的设备是否是第一次登录,而app端校验的是用户的账号是否是第一次登录,虽然可以大改所有的controller,但我并不想这么做,太不优雅了。

所以我就去深入了解了一下Spring Security的过滤链

每个请求都会执行一遍springsecurity 过滤链中的所有过滤器,所以我写个过滤器加入到过滤链中,并且利用 addFilterAfter 加入到 UsernamePasswordAuthenticationFilter 之后,拦截所有的请求

当我做了之后首先遇到了第一个问题,静态资源不加载,报错的原因是因为多次commit了response,

因为每次访问都会走一遍这个过滤链,而我自定义的过滤器,并不完善,所以每个请求都会来commit我的response,百度了一番之后,大家都说放行在配置类中放行静态资源即可

原本我是配置了

 http.authorizeRequests()
                .antMatchers(securityProperty.getOpenApi()).permitAll()

但是我的静态资源还是走了过滤链

后来又配置了

 web.ignoring().antMatchers("/admin/**","/component/**","/favicon.ico");

这次页面显示正常了,晚上阅读springsecurity的相关文档得知,放图

但是后来又遇到了问题,我故意跳转一个404页面,404页面的图片又不加载了,这次又说我重复提交了response的commit

我先是怀疑又是静态文件走了过滤链,又跟老师一起阅读了源码发现,让忽略静态文件生效的的类叫做

FilterSecurityInterceptor

发现他的执行顺序在我的过滤器之前,我就想一定是因为这个类还没有走我的请求就发送了,所以导致没有忽略静态资源,我就利用

.addFilterAfter(verifySecureSupport, FilterSecurityInterceptor.class)

调整过滤链的顺序

还是不行。

一夜过去了

我睡前一直在想该怎么办

早上去工作室的时候突然想起来一个好办法,

利用

request.getServletPath()

获取请求的路径,如果是静态资源肯定会是.png,.js等等等等

反正都会有个点,并且接口是都没有点的

所以我就直接

if(request.getServletPath().indexOf(".")==-1)

运行起来,非常完美

问题都解决了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值