Spring : Spring Security
==========================================================================
spring-security-过滤器:
顶级Filter:SecurityContextPersistenceFilter:加载SecurityContext或者创建SecurityContext放在SecurityContextHolder里面。并在所有过滤器执行完之后清空SecurityContextHolder。
LogoutFilter:处理注销操作。销毁session等。
AbstractAuthenticationProcessingFilter:处理form登录过滤器,通过用户名密码判断登录是否有效。
DefaultLoginPageGeneratingFilter:spring-security提供的默认登录页面。
BasicAuthenticationFilter:与AbstractAuthenticationProcessingFilter类似,验证方式不同。
SecurityContextHolderAwareRequestFilter:包装客户请求,提供一些额外的数据。
RememberMeAuthenticationFilter:提供记住登录功能。cookie中存在时,自动创建context。
AnonymousAuthenticationFilter:匿名用户的登录权限过滤。
ExceptionTranslationFilter:处理抛出的异常,将请求重定向,或返回错误代码等。
SessionManagementFilter:防御session攻击,在登录成功后销毁session并重新生成session。
FilterSecurityInterceptor:用户授权控制,如果尚未认证,那么抛出尚未认证异常,如果已登录但没有权限,则抛出拒绝访问异常。如果已登录,而且有权限,则通过过滤。
FilterChainProxy:按照顺序调用一组Filter。
========================================================================
spring-security-数据库管理:
需要实现 UserDetailsService接口,并实现loadUserByUsername方法。这个方法返回一个UserDetail对象。
UserDetails接口:用户相关信息:
getAuthorities() 权限集合
getPassword() 密码
getUsername() 用户名
isAccountNonExpired() 有没有过期
isAccountNonLocked() 有没有锁定
isCredentialsNonExpired()证书有没有过期
isEnabled() 账户是否有效
整个流程:从请求中(cookie中或参数中等)获取请求验证信息,如用户名和密码,然后放入一个未认证的Authentication中,与UserDetail进行匹配,生成一个新的已认证的Authentication供其他组件使用。
=======================================================================
spring-security-权限缓存
CachingUserDetailsService: 需要一个UserDetailsService,如果没有UserCache,则使用UserDetailsService获取User并放入UserCache里面。
=========================================================================
spring-security-决策管理
AccessDecisionManager:决策管理器。对应的抽象类为:AbstractAccessDecisionManager(自定义需要继承它)
supports方法即为授权关键方法,返回true即为有权限,里面会循环一组AccessDecisionVoter所有Voter通过才返回true
RoleVoter:最常用的投票器,定义了权限的前缀 ROLE_ ,vote方法即为选举方法,authentication为当前用户的权限,attributes为访问所需权限,如果有权限,那么返回 ACCESS_GRANTED
有三个已经实现的决策管理器(继承AbstractAccessDecisionManager):
AffirmativeBased:有一个投票器通过,就会通过。
ConsensusBased:有一半以上投票器通过,才会允许访问。
UnanimousBased:所有投票器全部通过,才会允许访问。
架构图:


Spring : Spring Security的更多相关文章
- Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器
概要 之前的两篇文章,讲述了Spring Security 结合 OAuth2 .JWT 的使用,这一节要求对 OAuth2.JWT 有了解,若不清楚,先移步到下面两篇提前了解下. Spring Bo ...
- Spring Boot Security 整合 JWT 实现 无状态的分布式API接口
简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 - 阮一峰,这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boo ...
- Spring Boot Security 整合 OAuth2 设计安全API接口服务
简介 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版.本文重点讲解Spring Boot项目对OAuth2进行的实现,如果你对OAut ...
- boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域
spring boot: security post数据时,要么关闭crst,要么添加隐藏域 http.csrf().disable(); 或者: <input name="${_cs ...
- 使用Spring Cloud Security OAuth2搭建授权服务
阅读数:84139 前言: 本文意在抛砖引玉,帮大家将基本的环境搭起来,具体实战方案还要根据自己的业务需求进行制定.我们最终没有使用Spring Security OAuth2来搭建授权服务,而是完全 ...
- Spring Boot Security配置教程
1.简介 在本文中,我们将了解Spring Boot对spring Security的支持. 简而言之,我们将专注于默认Security配置以及如何在需要时禁用或自定义它. 2.默认Security设 ...
- Spring Boot Security Oauth2之客户端模式及密码模式实现
Spring Boot Security Oauth2之客户端模式及密码模式实现 示例主要内容 1.多认证模式(密码模式.客户端模式) 2.token存到redis支持 3.资源保护 4.密码模式用户 ...
- Spring Boot Security And JSON Web Token
Spring Boot Security And JSON Web Token 说明 流程说明 何时生成和使用jwt,其实我们主要是token更有意义并携带一些信息 https://github.co ...
- Spring Boot Security 保护你的程序
Spring Boot Security 本示例要内容 基于角色的权限访问控制 加密.解密 基于Spring Boot Security 权限管理框架保护应用程序 String Security介绍 ...
- Spring Cloud Security&Eureka安全认证(Greenwich版本)
Spring Cloud Security&Eureka安全认证(Greenwich版本) 一·安全 Spring Cloud支持多种安全认证方式,比如OAuth等.而默认是可以直接添加spr ...
随机推荐
- arcgis api for silverlight 3.1 更新说明
前言: 查看arcgis sl api 老版本帮助的方式:http://resources.arcgis.com/en/help/silverlight-api/3.0/xxxxxxx 新版本的帮助默 ...
- react 反模式——不使用jsx动态显示异步组件
前言: react反模式 (anti-patterns)指的是违背react思想(flux)的coding方式. 本文在 App 组件中,通过 Model.show 动态显示 Model 组件,通过 ...
- Linux 虚拟机虚拟网卡问题导致无法连接问题
问题描述 当 Linux 虚拟机启动时,通过串口输出或者启动日志, 观察到虚拟网卡启动或者初始化故障, 导致虚拟机无法连接. 问题分析 常见的超时报错范例如下: CentOS 复制 Bringing ...
- SQL Server ->> FIRST_VALUE和LAST_VALUE函数
两个都是SQL SERVER 2012引入的函数.用于返回在以分组和排序后取得最后一行的某个字段的值.很简单两个函数.ORDER BY字句是必须的,PARITION BY则是可选. 似乎没什么好说的. ...
- What’s the difference between a stack and a heap?
http://www.programmerinterview.com/index.php/data-structures/difference-between-stack-and-heap/ The ...
- 使用WdatePicker日期组件时,选择日期后,执行某个方法
WdatePicker({onpicked:function(){alert(123);},dateFmt:'yyyy年MM月dd日',maxDate:'%y-%M-%d'}) 1.onpicked: ...
- [使用经验]cocostudio UI编辑器的裁剪
日志-2015/03/16 描述:在程序使用UI编辑器导出文件的时候,该panel中大于panel的部分都没有显示出来,例如人物,一些特效等 原因:UI编辑器panel都勾上了裁剪 解决:在编辑器中把 ...
- tree 向上查找(更新删除后页面的数据)
需求 : 根据选择的id,需要找到一整条tree,id以及id数据的子集都已被删除(向下查找-----上一篇笔记),此时需要更新页面的数据(向上查找) //知道最底层的节点的id,查找满足id的整个t ...
- 学习Road map Part 01 数学
方法: 结合编程软件 matlab / octave / python / maxima / ruby 线性代数 向量.行列式 线性方程组 LU 分解 特征值.对角化 特征值算法
- KDD 2013推荐系统论文
LCARS: A Location-Content-Aware Recommender SystemAuthors: Hongzhi Yin, Peking University; Yizhou S ...