security

  1. 过滤器链

    1. 检查请求是否有请求信息-主要校验规则

      • UsernamePasswordAuthenticationFilter: 处理表单登录, 请求是否带用户名密码
      • BasicAuthenticationFilter: 是否有Basic码信息, 有会进行解码认证
    2. FilterSecurityInterceptor: 最后一部, 决定当前请求能不能继续, 根据不过的原因会抛出异常.

    3. ExceptionTranslationFilter: 在前FilterSecurityInterceptor有一个ExceptionTranslationFilter会处理FilterSecurityInterceptor抛出的异常, 引到用户根据前面过滤器的信息处理异常.
    4. security通过过滤器链判断用户是否授权, 读取HttpSecurity配置, 判断请求中是否携带信息, 选择需要执行的过滤器, 最后由ExceptionTranslationFilter统一进行权限认证, 如果未通过, 则会抛出异常, 由ExceptionTranslationFilter统一进行异常处理, 最后将异常信息返回给前台.

如果自定义Security过滤器 就是添加绿色的部分。

2. 认证流程

Created with Raphaël 2.1.2
  1. 认证流程处理说明

    • UsernamePasswordAuthenticationFilter: 登陆请求未认证状态进入, 设置账户密码, 还未获取权限, 设置一些用户信息IP SESSION
    • AuthenticationManager: 负责收集所有AuthenticationProvider, 循环所有AuthenticationProvider获取是否支持, 挑出一个provider来获取用户认证
    • AuthenticationProvider: 真正校验的逻辑
    • UserDetailsService: 获取UserDetails获取权限信息返回给UsernamePasswordAuthenticationFilter, 成功SuccessHandler, 失败FailureHandler
    • UserDetails: Authentication已认证
  2. 认证结果如何在多个请求间共享

    • SecurityContext: 在认证成功之前方式上下文
    • SecurityContextHolder: ThreadLocal(线程级环境变量)封装, 获取认证信息
    • SecurityContextPersisitenceFilter: 在整个过滤器链的最前面, request进来检查Session中是否有SecurityContext如果有放到SecurityContextHolder没有空过, response回来检查SecurityContextHolder是否有SecurityContext, 如果有放置到Session中, 没有空过;
  3. 获取认证用户信息

    • SecurityContextHolder.getContext().getAuthentication(): 静态方法获取
    • Controller接口方法参数: Authentication authentication Spring mvc会自动注入
    • @AuthenticationPrincipal UserDetails userDetails: 使用朱姐@AuthenticationPrincipal UserDetails 只注入用户信息

源码地址:https://github.com/Artister/tutorials-java/tree/master/security

Security 安全框架1的更多相关文章

  1. Spring Security安全框架

    今天来简单介绍一下Spring Security安全框架 简介 Spring Security 提供了基于javaEE的企业应有个你软件全面的安全服务.这里特别强调支持使用SPring框架构件的项目, ...

  2. Spring Security安全框架入门篇

    一.Spring Security相关概念 1.1..Spring Security介绍: Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安 ...

  3. Spring Security 安全框架

    一 简介:Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spr ...

  4. security安全框架,用户登录安全认证与退出

    一.创建用户表及实体类 二.编写security配置文件 <?xml version="1.0" encoding="UTF-8"?><bea ...

  5. springboot集成spring security安全框架入门篇

    一. :spring security的简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下 ...

  6. 001 Hello Security 的框架搭建

    一:STS 1.下载STS 官网:http://spring.io/tools 使用一个干净的STS进行操作学习. 2.jdk检查 3.添加自己的maven 4.使用tomcat 二:新建项目 1.新 ...

  7. Spring boot 整合spring Data JPA+Spring Security+Thymeleaf框架(上)

    近期上班太忙所以耽搁了给大家分享实战springboot 框架的使用. 以下是spring boot 整合多个框架的使用. 首先是准备工作要做好. 第一  导入框架所需的包,我们用的事maven 进行 ...

  8. security安全框架 配置

    <?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns="http://w ...

  9. SpringBoot+thymeleaf+security+vue搭建后台框架 基础篇(一)

    刚刚接触SpringBoot,说说踩过的坑,主要的还是要记录下来,供以后反省反省! 今天主要讲讲 thymeleaf+security 的搭建,SpringBoot的项目搭建应该比较简单,这里就不多说 ...

随机推荐

  1. leetcode Ch2-Dynamic Programming II

    一. Longest Valid Parentheses 方法一.一维DP class Solution { public: int longestValidParentheses(string s) ...

  2. Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)

    前言:本文是我撰写的关于搭建“Nginx + PHP(FastCGI)”Web服务器的第6篇文章.本系列文章作为国内最早详细介绍 Nginx + PHP 安装.配置.使用的资料之一,为推动 Nginx ...

  3. redis下的adlist

    //adlist.h #ifndef __ADLIST__H__ #define __ADLIST__H__ typedef struct listNode_ { struct listNode_ * ...

  4. cascade属性

    cascade属性是设置级联操作的也就是在操作一端的数据如果影响到多端数据时会进行级联操作,一对一的时候直接写在标签上,其他的要写在set标签上 cascade="none|save-upd ...

  5. 设置python的默认编码方式为utf-8

    在python的Lib\site-packages文件夹下新建一个sitecustomize.py,然后通过sys.getdefaultencoding()获取当前的默认编码 内容为:

  6. MySQL存储过程-把一个查询的结果,做为变量,更新另一张表

    create table t1(c1 varchar(20));insert into t1 select 't1'; create table t2(c2 varchar(20));insert i ...

  7. 安卓原生与hml交互(WebView基础)

    WebView加载页面 webView有两种加载方式, 加载网络地址 webView.loadUrl("www.xxx.com/index.html"); 加载本地资源 webVi ...

  8. 程序人生:02我来告诉你,一个草根程序员如何进入BAT

    本文摘自左潇龙博客,原文出处:http://www.cnblogs.com/zuoxiaolong/p/life54.html 引言 首先声明,不要再问LZ谁是林萧,林萧就是某著名程序员小说的主角名字 ...

  9. 好用的纯CSS加载动画-spinkit

    首先放一个css  spinkit <style> .loaders{ width: 100%; height: 100%; padding: 100px; box-sizing: bor ...

  10. 折腾一下WebSocket的ArrayBuffer传输方式

    前言   之前写WebSocket都是基于文本传输的,后来准备升级项目,于是打算尝试一下arraybuffer传输方式,由于是第一次使用javascript处理字符串转arraybuffer,不过真的 ...