关于每次请求都要执行两个,即经过重写FilterInvocationSecurityMetadataSource的getAttributes()方法
关于每次请求都要执行两个,即经过重写FilterInvocationSecurityMetadataSource的getAttributes()方法
执行两次的方法
@Overridepublic Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {//获取请求地址String requestUrl = ((FilterInvocation) object).getRequestUrl();List<TbPermission> permissions = permissionMapper.selectPermissionsByUrl(requestUrl);if(permissions == null || permissions.size() == 0){//请求路径没有配置权限,表明该请求接口可以任意访问return null;}String[] attributes = new String[permissions.size()];for(int i = 0;i< permissions.size();i++){attributes[i] = permissions.get(i).getPermissionCode();}return SecurityConfig.createList(attributes);}
原因:
- 自己定义了一个新的拦截器
- 在
extends AbstractSecurityInterceptor implements Filte
r,使用了InterceptorStatusToken token = super.beforeInvocation(filterInvocation);
/*** @author sl* @date: 2022/2/22 22:12* @description: 权限拦截器*/
@Component
public class CustomizeAbstractSecurityInterceptor extends AbstractSecurityInterceptor implements Filter {private FilterInvocationSecurityMetadataSource securityMetadataSource;@Autowiredpublic CustomizeAbstractSecurityInterceptor(FilterInvocationSecurityMetadataSource securityMetadataSource) {this.securityMetadataSource = securityMetadataSource;}@Autowiredpublic void setMyAccessDecisionManager(CustomizeAccessDecisionManager accessDecisionManager) {super.setAccessDecisionManager(accessDecisionManager);}@Overridepublic Class<?> getSecureObjectClass() {return FilterInvocation.class;}@Overridepublic SecurityMetadataSource obtainSecurityMetadataSource() {return securityMetadataSource;}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//为了安全的传送servletRequest、servletResponse、filterChainFilterInvocation fi = new FilterInvocation(servletRequest, servletResponse, filterChain);invoke(fi);}// 处理doFilter拦截下来的urlprivate void invoke(FilterInvocation filterInvocation) throws IOException, ServletException {//调用MyInvocationSecurityMetadataSource的getAttributes(Object object)这个方法获取fi对应的所有权限//再MyAccessDecisionManager的decide方法来校验用户的权限是否足够
// InterceptorStatusToken token = super.beforeInvocation(filterInvocation);
// try {// //执行下一个拦截器
// System.out.println("===========");filterInvocation.getChain().doFilter(filterInvocation.getRequest(), filterInvocation.getResponse());
// } finally {// super.afterInvocation(token, null);
// }}
解决方法:
- 不使用新的filter
- 直接注释掉
InterceptorStatusToken token = super.beforeInvocation(filterInvocation);
等影响的代码,然后直接让它执行下一个拦截器
我这里做的是直接执行下一个拦截器
关于每次请求都要执行两个,即经过重写FilterInvocationSecurityMetadataSource的getAttributes()方法相关推荐
- 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要
孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...
- 安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样
前言 用过Django 进行开发的同学都知道,Django框架天然支持对CSRF攻击的防护,因为其内置了一个名为CsrfViewMiddleware的中间件,其基于Cookie方式的防护原理,相比基于 ...
- session每次请求都是新建的吗_每次去火车站都是提心吊胆,感觉就像进了贼窝一样,有同感的吗?...
今天,我们一起来说说火车站那些事,献给那些刚踏入社会的,但愿少一些欺骗,多一分善良. 坐火车远行,去火车站跟前小卖铺买东西,给了零钱给老板.每次给,老板都会说,钱少了一个角.骗子老板说给我换零钱,给了 ...
- jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...
沟通重要吗? 太重要了,可以这么说,我们在生活中遇到的绝大部分问题其实都是沟通问题. 你的身边有这样的对话吗? 老婆对丈夫说:"老娘当初瞎眼了才看上你,成天就知道打牌" 妈妈对儿子 ...
- 每次请求都要建立连接吗?
在最早的http协议中,每进行一次http通信,就需要做一次tcp的连接.而一次连接需要进行3次握手,这种通信方式会增加通信量的开销. 所以在HTTP/1.1中改用了持久连接,就是在一次连接建立之后, ...
- 计算机 最后 一次 开机时间 win 7,Win7如何每次开机都显示上次登录时间?开机显示上次开机时间方法...
有时候我们不想他人对自己的电脑进行设置,或查看里面的文件资料,那么有什么方法可以让我们快速的知道电脑有没有被人动过呢?其实Win7系统中有一个功能,可以显示上一次登录的时间,这样就可以知道到底有没有被 ...
- php 两次post,ajax跨域往php程序post数据时,php程序总是执行两次的解决办法
ajax跨域往php程序post数据时,php程序总是执行两次的解决方法 php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的 ...
- 1 1 2 3 5 8 java_【Java】一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。...
题目: 一个斐波那契数列是由数字1.1.2.3.5.8.13.21.34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和.创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参 ...
- 电脑每次开机都要重新安装声卡驱动才有声音
电脑是从Windows7系统升级到Windows10系统的,但每次开机都要重新安装声卡驱动才有声音,这是什么原因呢?如何才能解决每次开机都要重新安装声卡驱动才有声音的问题呢? 工具/原料 硬件:电脑 ...
- 原生js XMLhttprequest请求onreadystatechange执行两次问题解决
原生js XMLhttprequest请求onreadychange执行两次解决 最近做到一个页面需要兼容IE,然后就写了一个原生 XMLhttprequest请求 直接上错误代码 xmlHttp = ...
最新文章
- Python 技术篇-用smtplib和email库实现邮件发送各种类型的附件实例演示
- UVA 10803 Thunder Mountain
- DCMTK:OFnumeric_limits的单元测试
- java,倒置后的顺序为3,2,1_java 程序设计题库
- 总结:服务器硬件对性能的影响
- 【TensorFlow-windows】学习笔记五——自编码器
- 计算机系统的主要功能要求,计算机系统的主要功能是什么
- adb.exe已停止工作
- 家长的爱-爱对了吗? - 刘浩霖
- https安全认证流程简介
- yaml参数文件的使用
- linux 下 批量添加后缀名,Linux下批量修改后缀名
- 微云为您讲述陌陌是如何布局“智慧商城”
- Mesosphere DCOS安装
- mysql中锁原理及for update悲观锁的详解
- C++打开文件夹中的多个文件并计算文件中数据的平均值
- 3dmax:3dmax的软件两大常用工具之基本二维图形(线、圆、椭圆、弧、多边形、星形、文本、螺旋线、截面、扩展样条线)之详细攻略
- 基于机器学习的心脏成像诊断
- C#BS通过ActiveX控件及制作CAB包来调CS
- 机器学习实战 - Logistic回归