关于每次请求都要执行两个,即经过重写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);}

原因:

  1. 自己定义了一个新的拦截器
  2. extends AbstractSecurityInterceptor implements Filter,使用了 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);
//        }}

解决方法:

  1. 不使用新的filter
  2. 直接注释掉InterceptorStatusToken token = super.beforeInvocation(filterInvocation);等影响的代码,然后直接让它执行下一个拦截器

我这里做的是直接执行下一个拦截器

关于每次请求都要执行两个,即经过重写FilterInvocationSecurityMetadataSource的getAttributes()方法相关推荐

  1. 孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)——数据库连接池 一、应用程序直接获取数据库连接的缺点   用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要

    孤傲苍狼 只为成功找方法,不为失败找借口! javaweb学习总结(三十九)--数据库连接池 一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对 ...

  2. 安全开发 | 如何让Django框架中的CSRF_Token的值每次请求都不一样

    前言 用过Django 进行开发的同学都知道,Django框架天然支持对CSRF攻击的防护,因为其内置了一个名为CsrfViewMiddleware的中间件,其基于Cookie方式的防护原理,相比基于 ...

  3. session每次请求都是新建的吗_每次去火车站都是提心吊胆,感觉就像进了贼窝一样,有同感的吗?...

    今天,我们一起来说说火车站那些事,献给那些刚踏入社会的,但愿少一些欺骗,多一分善良. 坐火车远行,去火车站跟前小卖铺买东西,给了零钱给老板.每次给,老板都会说,钱少了一个角.骗子老板说给我换零钱,给了 ...

  4. jsessionid每次请求都在变_为什么每次沟通都变争吵,学会这4条沟通原则,解决90%的沟通问题...

    沟通重要吗? 太重要了,可以这么说,我们在生活中遇到的绝大部分问题其实都是沟通问题. 你的身边有这样的对话吗? 老婆对丈夫说:"老娘当初瞎眼了才看上你,成天就知道打牌" 妈妈对儿子 ...

  5. 每次请求都要建立连接吗?

    在最早的http协议中,每进行一次http通信,就需要做一次tcp的连接.而一次连接需要进行3次握手,这种通信方式会增加通信量的开销. 所以在HTTP/1.1中改用了持久连接,就是在一次连接建立之后, ...

  6. 计算机 最后 一次 开机时间 win 7,Win7如何每次开机都显示上次登录时间?开机显示上次开机时间方法...

    有时候我们不想他人对自己的电脑进行设置,或查看里面的文件资料,那么有什么方法可以让我们快速的知道电脑有没有被人动过呢?其实Win7系统中有一个功能,可以显示上一次登录的时间,这样就可以知道到底有没有被 ...

  7. php 两次post,ajax跨域往php程序post数据时,php程序总是执行两次的解决办法

    ajax跨域往php程序post数据时,php程序总是执行两次的解决方法 php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的 ...

  8. 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等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和.创建一个方法,接受一个整数参数,并显示从第一个元素开始总共由该参 ...

  9. 电脑每次开机都要重新安装声卡驱动才有声音

    电脑是从Windows7系统升级到Windows10系统的,但每次开机都要重新安装声卡驱动才有声音,这是什么原因呢?如何才能解决每次开机都要重新安装声卡驱动才有声音的问题呢? 工具/原料 硬件:电脑 ...

  10. 原生js XMLhttprequest请求onreadystatechange执行两次问题解决

    原生js XMLhttprequest请求onreadychange执行两次解决 最近做到一个页面需要兼容IE,然后就写了一个原生 XMLhttprequest请求 直接上错误代码 xmlHttp = ...

最新文章

  1. Python 技术篇-用smtplib和email库实现邮件发送各种类型的附件实例演示
  2. UVA 10803 Thunder Mountain
  3. DCMTK:OFnumeric_limits的单元测试
  4. java,倒置后的顺序为3,2,1_java 程序设计题库
  5. 总结:服务器硬件对性能的影响
  6. 【TensorFlow-windows】学习笔记五——自编码器
  7. 计算机系统的主要功能要求,计算机系统的主要功能是什么
  8. adb.exe已停止工作
  9. 家长的爱-爱对了吗? - 刘浩霖
  10. https安全认证流程简介
  11. yaml参数文件的使用
  12. linux 下 批量添加后缀名,Linux下批量修改后缀名
  13. 微云为您讲述陌陌是如何布局“智慧商城”
  14. Mesosphere DCOS安装
  15. mysql中锁原理及for update悲观锁的详解
  16. C++打开文件夹中的多个文件并计算文件中数据的平均值
  17. 3dmax:3dmax的软件两大常用工具之基本二维图形(线、圆、椭圆、弧、多边形、星形、文本、螺旋线、截面、扩展样条线)之详细攻略
  18. 基于机器学习的心脏成像诊断
  19. C#BS通过ActiveX控件及制作CAB包来调CS
  20. 机器学习实战 - Logistic回归

热门文章

  1. uni-app商城源码/公众号/小程序/APP多端适配
  2. 对企业形象识别系统(CIS)的了解
  3. 实践小笔记(1) --- DBSCAN
  4. air dots 配对_小米AirDots蓝牙耳机如何连接iPhone?小米Air连接苹果手机的方法
  5. 如何拥有一个属于自己的网站
  6. Oracle函数之listagg函数
  7. 《华为研发》阅读 - 13
  8. 从iRedMail 创建用户脚本学习PostgreSQL数据库
  9. python选择题题库
  10. Linux下 文件或文件夹的复制(拷贝 cp)