SpringSecurity-FilterSecurityInterceptor的作用
FilterSecurityInterceptor也是很重要的一个interceptor,它的作用是对request进行权限判断,允许访问或者抛出accessDenied异常。
这个类继承AbstractSecurityInterceptor,它的代码很多,但是主要的逻辑有两步:(1)查询出request所需的角色;(2)判断用户是否具有该角色从而允许或拒绝
查询request所需角色是从FilterInvocationSecurityMetadataSource中获取的,可以重写这个方法从数据库中获取request所需的角色,但考虑每次请求都访问数据库比较浪费性能,如果url数量不多,可以考虑一次取完。
判断用户是否具有该角色从而允许或拒绝是在AccessDecisionManager的decide方法中执行的。原有逻辑主要是比对request所需角色和用户已有角色,如果匹配,就允许访问,否则拒绝。如果要实现自己的判断逻辑就要重写decide方法。
SpringSecurity的主要思路是在配置文件中配置url的允许访问角色,request时判断当前request所需角色是否和用户已有角色匹配,从而允许登录或者抛出拒绝访问异常。当抛出拒绝访问异常时,前面说的ExceptionTranslationFilter就会起作用了。
思考改变认证方式,将在配置文件中配置url的方式改为从数据库取,方便给角色授权操作。
在数据库中添加功能(权限)表,并和角色建立多对多关系,即一个用户有多个角色,一个角色又有多个权限。
1.登录验证时把用户具有的所有权限(对应URL地址)都添加securitycontext中,配置文件中把所有的URL地址都设置为permitall。然后重写decide方法,比对URL地址和用户允许访问的URL地址,允许访问或者拒绝访问,这个方案需要验证及注意静态文件的过滤。
2.考虑重写FilterInvocationSecurityMetadataSource把所有的url和角色的匹配取出,后面的decide还按原有方式。
这种思路也需要考虑url和角色的关联关系,而且一个url地址对应一个功能,具体实现也比较麻烦。默认方式可以使用pattern,配置也比较简单。所以各有好处,要根据具体情况决定方案。
SpringSecurity-FilterSecurityInterceptor的作用的更多相关文章
- SpringSecurity在Springboot下使用的初步体验
SpringSecurity曾经在十年前非常火热,只要是做权限系统,当时几乎非用它不可,记得是在XML文件里一堆的配置.曾几何时,Shiro冒了出来,以其简洁和轻量的风格慢慢地捕获了众多码农的心,从此 ...
- [转]springSecurity源码分析—DelegatingFilterProxy类的作用
使用过springSecurity的朋友都知道,首先需要在web.xml进行以下配置, <filter> <filter-name>springSecurityFilterC ...
- day5 SpringSecurity权限控制jsr250注解不起作用 AOP日志排除不需要织入的方法 web.xml配置错误码页面
- 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)
SpringSecurity(2) 好久没有写了,之前只写了一半,我是一边开发一边写Blog一边上班,所以真心没有那么多时间来维护Blog,项目已经开发到编写逻辑及页面部分了,框架基本上已经搭建好不会 ...
- 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(四)
SpringSecurity(1) 其实啊,这部分我是最不想写的,因为最麻烦的也是这部分,真的是非常非常的麻烦.关于SpringSecurity的配置,让我折腾了好半天,网上的配置方式一大把,但总有一 ...
- SpringSecurity个性化用户认证流程
⒈自定义登录页面 package cn.coreqi.security.config; import org.springframework.context.annotation.Bean; impo ...
- SpringSecurity的Filter执行顺序在源码中的体现
在网上看各种SpringSecurity教程时,都讲到了SpringSecurity的Filter顺序.但是一直不知道这个顺序在源码中是如何体现的.今天一步一步的查找,最终找到顺序是在FilterCo ...
- springboot+mybatis+springSecurity+thymeleaf
配置步骤: .pom <dependencies> <dependency> <groupId>org.springframework.security</g ...
- SpringSecurity学习笔记(一):搭建最简单的SpringSecurity应用
学习过程参考自:http://www.mossle.com/docs/auth/html/pt01-quickstart.html 一.搭建Maven项目: 所需引用的jar包如下: pom.xml文 ...
随机推荐
- 『TensorFlow』0.x_&_1.x版本框架改动汇总
基本数值运算 除法和模运算符(/,//,%)现在匹配 Python(flooring)语义.这也适用于 [tf.div] 和 [tf.mod].要获取基于强制整数截断的行为,可以使用 [tf.trun ...
- 查看局域网指定IP的电脑名
nbtstat -a 192.168.0.139 节点 IP 址址: [192.168.0.140] 范围 ID: [] NetBIOS 远程计算机名称表 名称 类型 状态 ------------- ...
- django1
* <pre>━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ 王 ┃ * ┃ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ...
- 词向量编码 word2vec
word2vec word2vec 是Mikolov 在Bengio Neural Network Language Model(NNLM)的基础上构建的一种高效的词向量训练方法. 词向量 词向量(w ...
- MapRdeuce&Yarn的工作机制(YarnChild是什么)
MapRdeuce&Yarn的工作机制 一幅图解决你所有的困惑 那天在集群中跑一个MapReduce的程序时,在机器上jps了一下发现了每台机器中有好多个YarnChild.困惑什么时Yarn ...
- Eclipse+Spring boot开发教程
一.安装 其实spring boot官方已经提供了用于开发spring boot的定制版eclipse(STS,Spring Tool Suite)直接下载使用即可,但考虑到可能有些小伙伴不想又多装个 ...
- linux下mysql多实例安装
1.MySQL多实例介绍 1.1.什么是MySQL多实例 MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的 ...
- Java容器解析系列(3) List AbstractList ListIterator RandomAccess fail-fast机制 详解
做为数据结构学习的常规,肯定是先学习线性表,也就是Java中的List,开始 Java中List相关的类关系图如下: 此篇作为对Java中相关类的开篇.从上图中可以看出,List和AbstractLi ...
- python第三方库函数安装
以安装pillow库为例 第一.在cmd环境中安装. 第二.输入pip -h(注意之间有个空格),会出现下图界面. 第三.输入pip install pillow,就会自动安装第三方库. 注意:这里面 ...
- 无法对含有多个.java(或.class)文档的程序进行编译(或解释)
通常初学者会出现这样的问题:无法对含有多个.java(或.class)文档的程序进行编译(或解释). root@yogile-VirtualBox:/alive/string# javac work/ ...