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的作用的更多相关文章

  1. SpringSecurity在Springboot下使用的初步体验

    SpringSecurity曾经在十年前非常火热,只要是做权限系统,当时几乎非用它不可,记得是在XML文件里一堆的配置.曾几何时,Shiro冒了出来,以其简洁和轻量的风格慢慢地捕获了众多码农的心,从此 ...

  2. [转]springSecurity源码分析—DelegatingFilterProxy类的作用

    使用过springSecurity的朋友都知道,首先需要在web.xml进行以下配置, <filter>  <filter-name>springSecurityFilterC ...

  3. day5 SpringSecurity权限控制jsr250注解不起作用 AOP日志排除不需要织入的方法 web.xml配置错误码页面

  4. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(五)

    SpringSecurity(2) 好久没有写了,之前只写了一半,我是一边开发一边写Blog一边上班,所以真心没有那么多时间来维护Blog,项目已经开发到编写逻辑及页面部分了,框架基本上已经搭建好不会 ...

  5. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(四)

    SpringSecurity(1) 其实啊,这部分我是最不想写的,因为最麻烦的也是这部分,真的是非常非常的麻烦.关于SpringSecurity的配置,让我折腾了好半天,网上的配置方式一大把,但总有一 ...

  6. SpringSecurity个性化用户认证流程

    ⒈自定义登录页面 package cn.coreqi.security.config; import org.springframework.context.annotation.Bean; impo ...

  7. SpringSecurity的Filter执行顺序在源码中的体现

    在网上看各种SpringSecurity教程时,都讲到了SpringSecurity的Filter顺序.但是一直不知道这个顺序在源码中是如何体现的.今天一步一步的查找,最终找到顺序是在FilterCo ...

  8. springboot+mybatis+springSecurity+thymeleaf

    配置步骤: .pom <dependencies> <dependency> <groupId>org.springframework.security</g ...

  9. SpringSecurity学习笔记(一):搭建最简单的SpringSecurity应用

    学习过程参考自:http://www.mossle.com/docs/auth/html/pt01-quickstart.html 一.搭建Maven项目: 所需引用的jar包如下: pom.xml文 ...

随机推荐

  1. AI robots CodeForces - 1045G (cdq分治)

    大意: n个机器人, 位置$x_i$, 可以看到$[x_i-r_i,x_i+r_i]$, 智商$q_i$, 求智商差不超过$k$且能互相看到的机器人对数. 这个题挺好的, 关键是要求互相看到这个条件, ...

  2. webForm TO MVC

     

  3. 注册一个gitHub

    GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub. GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代 ...

  4. python url 下载并保存

    方法一:用urllib import jsonimport urllib url_model='{"version":"2","url":& ...

  5. bzoj2190

    题解: 显然当坐标不互质的时候 是可以看得见的 所以线性筛选欧拉函数 代码: #include<bits/stdc++.h> using namespace std; ; int n,an ...

  6. vue-router进阶-2-路由原信息

    //meta字段,一个路由匹配到的所有路由记录会暴露为 $route 对象(还有在导航守卫中的路有对象)的 $route.matched 数组. const router = new VueRoute ...

  7. 阶段01Java基础day24多线程+GUI

    25.01_多线程(多线程方法) 1.yield让出cpu 2.setPriority()设置线程的优先级 25.02_多线程(单例设计模式)(掌握) 单例设计模式:保证类在内存中只有一个对象. 如何 ...

  8. npm 基本使用命令

    NMP 本地 远程npm install uglify-js --globalnpm install underscore@1.8.2 指定版本 npm update underscore npm s ...

  9. 剑指Offer 58. 对称的二叉树 (二叉树)

    题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目地址 https://www.nowcoder.com/practice/ ...

  10. Windows 应用商店无法下载---启动更新

    今天想在应用商店下载东西,但是以直没成功,查看原因结果是因为我的Windows自动更新关了. 百度,如何打开自动更新,要打开本地组策略编辑器,但是我是Windows家庭版,,,没有这个东西,, 最后, ...