spring实战----security4.1.3认证过程源码分析

Herman-Hong Herman-Hong     2022-10-21     808

关键词:

上一篇的配置中基本上涵盖了认证过程中的各种情况,现通过时序图对其用到的Security源码进行分析

认证时序图



上面两幅图(分别是鉴权过程和认证登录过程)中的操作过程(图中不全)涵盖了下面的

认证过程

如果用户直接访问一个受保护的资源,那么认证过程将如下:

1、FilterSecurityInterceptor对其进行鉴权,没有认证或者没有权限则抛异常给ExceptionTranslationFilter,根据没有认证或者没有权限分别进行处理。

2、没有认证的情况下LoginUrlAuthenticationEntryPoint引导用户进行登录,通常是重定向到一个基于form表单进行登录的页面,具体视配置而定。

3、用户输入用户名和密码后请求认证,UsernamePasswordAuthenticationFilter会户名和密码封装成一个UsernamePasswordAuthenticationToken对象,然后把它传递给AuthenticationManager进行认证。

4、如果认证时用户不存在或者密码错误由SimpleUrlAuthenticationFailureHandler进行处理,跳转到设置的页面(一般是登录页面),上一篇中有说明

5如果认证成功则会保存返回的AuthenticationSecurityContext,然后(SavedRequestAwareAuthenticationSuccessHandler)默认会将用户重定向到之前访问的页面(可以自定义,上一篇中有说明)。

6、用户登录认证成功后再次访问之前受保护的资源时FilterSecurityInterceptor会对用户进行权限鉴定,如不存在对应的访问权限,则AccessDeniedHandlerImpl会返回403错误码(可以自定义返回到指定页面,上一篇中有说明)。

 

spring实战----security4.1.3认证的过程以及原请求信息的缓存及恢复(requestcache)(代码片段)

一、先看下认证过程认证过程分为7步:1.用户访问网站,打开了一个链接(originurl)。2.请求发送给服务器,服务器判断用户请求了受保护的资源。3.由于用户没有登录,服务器重定向到登录页面4.填写表单,点击登录5... 查看详情

spring实战----security4.1.3实现根据请求跳转不同登录页以及登录后根据权限跳转到不同页配置(代码片段)

一、背景介绍上一篇最后总结说了:1)被认证请求被FilterSecurityInterceptor拦截看有没有对应权限,如果没有抛异常给ExceptionTranslationFilter2)ExceptionTranslationFilter缓存原请求,利用LoginUrlAuthenticationEntryPoint入口跳 查看详情

spring实战----开篇(包含系列目录链接)

终于还是要对Spring进行解剖,接下来Spring实战篇系列会以应用了Spring技术的JavaWeb的应用mango为例,来分析Spring各个模块的技术,包括源码解析等,谨以此记!!! 【Spring实战】----开发环境配置【Spring... 查看详情

spring实战笔记:spring核心

springcore一.简介: 1.依赖注入(DI)   优点:解耦   Spring通过应用上下文(ApplicationContext)装载bean的定义,并把它们组装起来。   Spring应用上下文负责对象的创建和组装。    &n... 查看详情

spring实战

Spring的两个核心特性:依赖注入(DI)和面向切面编程(AOP) 为了降低Java开发的复杂性,Spring采取了以下4种关键策略:  基于POJO的轻量级和最小侵入性编程  通过依赖注入和面向接口实现松耦合  基于切面和惯例进行声明... 查看详情

spring4.1.8扩展实战之四:感知spring容器变化(smartlifecycle接口)(代码片段)

欢迎访问我的GitHub本篇概览本章是《spring4.1.8扩展实战》的第四篇,如果业务上需要在spring容器启动和关闭的时候做一些操作,可以自定义SmartLifecycle接口的实现类来扩展,本章我们通过先分析再实战的方法,来掌握这种扩展方... 查看详情

spring实战笔记:spring集成

...是客户端应用和服务端之间的会话。    1.Spring通过多种远程调用技术支持RPC(remoteprocedurecall,远程过程调用)RPC模型使用场景RMI不考虑网络限制时(例如防火墙),访问/发布基于Java的服务Hessian或Burlap考虑网络限... 查看详情

[dubbo实战]dubbo+zookeeper+spring实战(转)

     这里最熟悉的就是spring了,项目中应用很多。dubbo是一个实现分布式的框架,zookeeper是注册中心。给我的感觉就像多对多关系的两者表,zookeeper相当于第三张表维护关系。下面通过一个小程序加深认识。一... 查看详情

《spring实战(第三版)》之旅

...糊。  反正经过这五大框架的学习,感觉最重要的还是Spring框架,于是乎,开学时期偶得一书《Spring实战》,在网上口碑还是蛮高的,于是继续深入学习(复习)下Spring这个框架。  到目前为止已经读到了第8章使用SpringWebFl... 查看详情

spring实战入门,带你轻松掌握spring框架

Spring框架是什么?Spring是于2003年兴起的一个轻量级的Java开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。Spring是可以在JavaSE/EE中使用的轻量级开源框架。Spring的主... 查看详情

spring4实战学习笔记

《Spring4实战第4版》2016年4月新出版的,之前的第三版看起来还是不错的,所以看到新版就直接买下来。英文版源码地址:SpringinAction,FourthEditionCoversSpring4 1.IOC装配Bean参考【Spring实战4 2.2】,作者提倡无XML配置化... 查看详情

spring实战笔记二

一、Spring配置的方式    spring容器用来创建应用程序中的bean,并通过DI来协调这些对象间的关系。    在bean进行装配时,spring提供了三种主要的装配机制。      ①在XML中进行显式配置      ②在Java中进... 查看详情

spring实战-手动创建spring项目结构

环境:MacOS+IntelliJIDEA2019.3.1(UltimateEdition)1、创建存放项目的文件夹2、创建pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:x 查看详情

spring实战--1spring的核心

  最近面试总会涉及Spring的优点,SpringMVC与Struts2的比较,生活慢慢稳定下来,这些面试还是应了那句话“只顾盲目拉车,不会低头看路”,回过头来还是要好好研究一下Spring,如果仅仅是停留在粘贴拷贝像从前一样机械... 查看详情

spring07_纯注解实战及spring整合junit

本教程源码请访问:tutorial_demo在《Spring04_IOC和DI实战》当中,我们使用XML配置的方式结合ApacheCommonsDbUtils实现单表的CRUD操作,这篇教程我们使用纯注解方式结合ApacheCommonsDbUtils实现单表的CRUD操作。一、需求和技术要求1.1、需求实... 查看详情

spring实战笔记:web中的spring

一.构建SpringWeb应用1.SpringMVC中用户请求处理  上图展示了请求使用SpringMVC所经历的所有站点。  1:在请求离开浏览器时,会带有所有请求内容的信息,至少会包含请求的URL。     请求通过Spring的Di... 查看详情

spring实战-第二章-装配bean

Bean是Spring对象的声明(装配wiring),要使用Spring,必须先装配需要使用的对象,有3种装配的方式自动化装配Bean通过Java代码装配通过XML装配自动化装配Bean自动化装配Bean很简单1.声明接口packagesoundsystem;publicinterfaceCompactDisc{voidplay(... 查看详情

spring实战spring注解配置工作原理源码解析(代码片段)

一、背景知识在【Spring实战】Spring容器初始化完成后执行初始化数据方法一文中说要分析其实现原理,于是就从源码中寻找答案,看源码容易跑偏,因此应当有个主线,或者带着问题、目标去看,这样才能最... 查看详情