Springboot之登录模块探索(含Token,验证码,网络安全等知识)(9)

2023-05-02 来源:飞速影视
View Code
可以看到SystemHttpServletRequestWrapper的64行开始,重写了两个获取参数的方法,在获取参数的时候进行过滤即可~
那64行往上是干啥的咧,这个是将ServletRequest里的数据读出来保存一份,因为ServletRequest里的数据流只能读取一次,很不方便
啥意思呢,就是你在这个Filter里
inputStream = request.getInputStream();reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));String line = "";while ((line = reader.readLine()) != null) { sb.append(line);}
把数据读完,下个Filter再执行这些代码,就没数据了(从而导致Spring也接收不到数据)
所以要保存起来,让后面的过滤器Filter和拦截器Interceptor快乐的读数据,没有后顾之忧(例如上面提到的验证码设计,如果你想用拦截器拦截,然后进行验证,则势必会读数据),既然封装ServletRequest这么重要,那必须得保证这个Filter第一个加载啊
在Springboot中,Filter的排序用@Order是没用的,必须要用FilterRegistrationBean进行注册才能排序,如:
1/** 2 * @auther: NiceBin 3 * @description: 为了排序Filter,如果Filter有顺序要求 4 * 那么需要在此注册,设置order(值越低优先级越高) 5 * 其他没顺序需要的,可以@WebFilter注册 6 * 如@WebFilter(filterName = "SecurityFilter", urlPatterns = "/*", asyncSupported = true) 7 * @date: 2020/12/15 15:48 8*/ 9@Configuration10publicclass FilterConfig {1112 @Autowired13 SystemFilter systemFilter;14/**15 * 注册SystemFilter,顺序为1,任何其他filter不能比他优先16 * @return17*/18 @Bean19public FilterRegistrationBean filterRegist(){20 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();21 filterRegistrationBean.setFilter(systemFilter);22 filterRegistrationBean.setName("SystemFilter");23 filterRegistrationBean.addUrlPatterns("/*");24 filterRegistrationBean.setAsyncSupported(true);25 filterRegistrationBean.setOrder(1);26return filterRegistrationBean;27 }28 }
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号