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

  1. Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器

    概要 之前的两篇文章,讲述了Spring Security 结合 OAuth2 .JWT 的使用,这一节要求对 OAuth2.JWT 有了解,若不清楚,先移步到下面两篇提前了解下. Spring Bo ...

  2. Spring Boot Security 整合 JWT 实现 无状态的分布式API接口

    简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 - 阮一峰,这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boo ...

  3. Spring Boot Security 整合 OAuth2 设计安全API接口服务

    简介 OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版.本文重点讲解Spring Boot项目对OAuth2进行的实现,如果你对OAut ...

  4. boke练习: spring boot: security post数据时,要么关闭crst,要么添加隐藏域

    spring boot: security post数据时,要么关闭crst,要么添加隐藏域 http.csrf().disable(); 或者: <input name="${_cs ...

  5. 使用Spring Cloud Security OAuth2搭建授权服务

    阅读数:84139 前言: 本文意在抛砖引玉,帮大家将基本的环境搭起来,具体实战方案还要根据自己的业务需求进行制定.我们最终没有使用Spring Security OAuth2来搭建授权服务,而是完全 ...

  6. Spring Boot Security配置教程

    1.简介 在本文中,我们将了解Spring Boot对spring Security的支持. 简而言之,我们将专注于默认Security配置以及如何在需要时禁用或自定义它. 2.默认Security设 ...

  7. Spring Boot Security Oauth2之客户端模式及密码模式实现

    Spring Boot Security Oauth2之客户端模式及密码模式实现 示例主要内容 1.多认证模式(密码模式.客户端模式) 2.token存到redis支持 3.资源保护 4.密码模式用户 ...

  8. Spring Boot Security And JSON Web Token

    Spring Boot Security And JSON Web Token 说明 流程说明 何时生成和使用jwt,其实我们主要是token更有意义并携带一些信息 https://github.co ...

  9. Spring Boot Security 保护你的程序

    Spring Boot Security 本示例要内容 基于角色的权限访问控制 加密.解密 基于Spring Boot Security 权限管理框架保护应用程序 String Security介绍 ...

  10. Spring Cloud Security&Eureka安全认证(Greenwich版本)

    Spring Cloud Security&Eureka安全认证(Greenwich版本) 一·安全 Spring Cloud支持多种安全认证方式,比如OAuth等.而默认是可以直接添加spr ...

随机推荐

  1. Installing TensorFlow on Ubuntu

    1.安装方法有4种,官方推荐是第一种. virtualenv(官方推荐)    "native" pip    Docker    Anaconda 2.基于virtualenv的 ...

  2. centos 克隆系统放到别的机器上后出现网卡启动不了的情况

      1. Remove Network Manager from startup Services. #chkconfig NetworkManager off 2. Add Default Net ...

  3. 动态给table添加动态航

    <html> <head> <title>usually function</title> <meta http-equiv="Cont ...

  4. wcf 配置与代码创建

    <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <s ...

  5. 【源码分析】cocostudio场景编辑器的触发器逻辑

    去看场景编辑器的差不多都可以看到有模拟器的设置(菜单栏的设置).默认是选择cocostudio安装路径中的Simulator.exe这个模拟器,看官网介绍是自己可以选择模拟器,而且公开源代码可以按需设 ...

  6. June 30th 2017 Week 26th Friday

    Love me little and love me long. 不求情意浓,但愿情意久. Some people say beautiful young people are the creatur ...

  7. easyui学习笔记8—在手风琴中加载其他的页面

    在手风琴中加载其他页面和在表格中加载其他的页面有写类似的,就是请求另外一个页面显示数据. 1.先看看引用的资源文件 <link rel="stylesheet" href=& ...

  8. 迷宫问题求解——C++

    迷宫问题思路 根据昨天的博客,有如下几种解决方案 克鲁斯卡尔 ,为避免死循环,需要设定优化路径的次数. Prim,为避免死循环,需要设定优化路径的次数,暂定200次. BFS , 实现简单,无死循环. ...

  9. jmeter报告优化---展示详细信息

    参考文档:https://www.cnblogs.com/puresoul/p/5049433.html 楼上博主写的还是很详细,在报告优化这块,但是在操作中也走了一些弯路,我改动了两个点才成功,根据 ...

  10. SOJ4459 skysky's game(贪心+优先队列)

    天天最近迷上了天天爱消除游戏,现在他觉得这个游戏已经没有意思了.所以他发明一个新的消除游戏.有n堆糖果,每一个糖果有一个重量w,天天每次都选择两个糖果合并为一个糖果,新的糖果的重量等于这两个糖果的重量 ...