`
234390216
  • 浏览: 10216835 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:461957
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1774230
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1397359
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394642
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679418
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530206
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1180474
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:465756
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:150973
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:67670
社区版块
存档分类
最新评论

Spring Security(04)——认证简介

阅读更多

认证简介

目录

1.1     认证过程

1.2     Web应用的认证过程

1.2.1    ExceptionTranslationFilter

1.2.2    request之间共享SecurityContext

 

1.1     认证过程

       1、用户使用用户名和密码进行登录。

       2Spring Security将获取到的用户名和密码封装成一个实现了Authentication接口的UsernamePasswordAuthenticationToken

       3、将上述产生的token对象传递给AuthenticationManager进行登录认证。

       4AuthenticationManager认证成功后将会返回一个封装了用户权限等信息的Authentication对象。

       5、通过调用SecurityContextHolder.getContext().setAuthentication(...)AuthenticationManager返回的Authentication对象赋予给当前的SecurityContext

 

       上述介绍的就是Spring Security的认证过程。在认证成功后,用户就可以继续操作去访问其它受保护的资源了,但是在访问的时候将会使用保存在SecurityContext中的Authentication对象进行相关的权限鉴定。

 

1.2     Web应用的认证过程

       如果用户直接访问登录页面,那么认证过程跟上节描述的基本一致,只是在认证完成后将跳转到指定的成功页面,默认是应用的根路径。如果用户直接访问一个受保护的资源,那么认证过程将如下:

       1、引导用户进行登录,通常是重定向到一个基于form表单进行登录的页面,具体视配置而定。

       2、用户输入用户名和密码后请求认证,后台还是会像上节描述的那样获取用户名和密码封装成一个UsernamePasswordAuthenticationToken对象,然后把它传递给AuthenticationManager进行认证。

       3、如果认证失败将继续执行步骤1,如果认证成功则会保存返回的AuthenticationSecurityContext,然后默认会将用户重定向到之前访问的页面。

       4、用户登录认证成功后再次访问之前受保护的资源时就会对用户进行权限鉴定,如不存在对应的访问权限,则会返回403错误码。

 

       在上述步骤中将有很多不同的类参与,但其中主要的参与者是ExceptionTranslationFilter

 

1.2.1   ExceptionTranslationFilter

       ExceptionTranslationFilter是用来处理来自AbstractSecurityInterceptor抛出的AuthenticationExceptionAccessDeniedException的。AbstractSecurityInterceptorSpring Security用于拦截请求进行权限鉴定的,其拥有两个具体的子类,拦截方法调用的MethodSecurityInterceptor和拦截URL请求的FilterSecurityInterceptor。当ExceptionTranslationFilter捕获到的是AuthenticationException时将调用AuthenticationEntryPoint引导用户进行登录;如果捕获的是AccessDeniedException,但是用户还没有通过认证,则调用AuthenticationEntryPoint引导用户进行登录认证,否则将返回一个表示不存在对应权限的403错误码。

 

1.2.2  在request之间共享SecurityContext

       可能你早就有这么一个疑问了,既然SecurityContext是存放在ThreadLocal中的,而且在每次权限鉴定的时候都是从ThreadLocal中获取SecurityContext中对应的Authentication所拥有的权限,并且不同的request是不同的线程,为什么每次都可以从ThreadLocal中获取到当前用户对应的SecurityContext呢?在Web应用中这是通过SecurityContextPersistentFilter实现的,默认情况下其会在每次请求开始的时候从session中获取SecurityContext,然后把它设置给SecurityContextHolder,在请求结束后又会将SecurityContextHolder所持有的SecurityContext保存在session中,并且清除SecurityContextHolder所持有的SecurityContext。这样当我们第一次访问系统的时候,SecurityContextHolder所持有的SecurityContext肯定是空的,待我们登录成功后,SecurityContextHolder所持有的SecurityContext就不是空的了,且包含有认证成功的Authentication对象,待请求结束后我们就会将SecurityContext存在session中,等到下次请求的时候就可以从session中获取到该SecurityContext并把它赋予给SecurityContextHolder了,由于SecurityContextHolder已经持有认证过的Authentication对象了,所以下次访问的时候也就不再需要进行登录认证了。

 

(注:本文是基于Spring Security3.1.6所写)

 

(注:原创文章,转载请注明出处。原文地址:http://elim.iteye.com/blog/2156765

8
2
分享到:
评论
2 楼 sunwang810812 2017-05-17  
楼主的文章特别好,不过要是没自己实践过的话,肯定会看到很晕,建议大家看一篇文章
http://blog.csdn.net/u012367513/article/details/38866465,按这个文章做一遍练习,再来看楼主的文章就知道说的说什么了,个人建议,不喜勿喷
1 楼 wen_1113 2015-02-12  

相关推荐

    Spring Security 资料合集

    这三份资料——"实战Spring Security 3.x.pdf"、"Spring Security 3.pdf" 和 "Spring Security使用手册.pdf" 将深入探讨这些概念,并提供实践指导,帮助读者掌握如何在实际项目中应用Spring Security。通过学习这些...

    非常珍贵的Spring Security企业级认证与授权全套视频(自鉴过后,良心推荐)

    SpringSecurity 全套开发,设计源码解读,整个拦截器链分析,QQ登录,微信登录,短信验证,短信登录,在security基础上学习写一个自定义验证授权设计模式,整套视频讲解的分享细致认真,非常值得学习。不管小白还是...

    SpringSecurity笔记2-SpringSecurity命名空间

    在"SpringSecurity笔记2-SpringSecurity命名空间"这个主题中,我们将深入探讨SpringSecurity配置的核心——命名空间。 SpringSecurity通过XML配置文件中的命名空间来简化设置过程,这些命名空间提供了丰富的元素和...

    Spring Security 3系列文章——入门篇(一)

    **Spring Security 3 系列文章——入门篇(一)** Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,广泛应用于Java企业级应用和Spring Boot项目中。本篇将作为Spring Security 3的入门介绍,帮助...

    springboot项目——基于springSecurity实现的前后端分离的企业级人事管理系统

    而SpringSecurity作为Spring生态系统中的安全组件,为开发者提供了强大的权限管理和认证功能。本文将深入探讨如何在SpringBoot项目中集成SpringSecurity,构建一个前后端分离的企业级人事管理系统。 首先,...

    spring security 2.0 的简单配置使用(补)——用aop控制method级权限

    Spring Security的核心组件包括认证(Authentication)和授权(Authorization)。认证是确定用户身份的过程,而授权则是决定已认证的用户可以访问哪些资源或执行哪些操作。Spring Security提供了多种机制来处理这两...

    SpringBoot集成Spring Security登录管理 添加 session 共享【完整源码+数据库】

    我们将基于给定的标签——SpringBoot、SpringSecurity、mysql、session共享和idea来构建一个完整的示例。 首先,SpringBoot是一个轻量级的Java框架,它简化了创建独立的、生产级别的基于Spring的应用程序。通过内置...

    spring security4登陆例子

    本文将通过一个具体的示例——Spring MVC + Spring Security 4 的整合登录实例来深入探讨Spring Security的使用方法。 #### 二、核心配置类:`SecurityConfig` 在本例中,我们使用的是Java Config的方式进行Spring...

    Spring Security学习总结二

    Spring Security提供了一个预构建的`UserDetailsService`实现——`JdbcDaoImpl`,它允许从数据库中检索用户信息。该类继承自`JdbcDaoSupport`,后者提供了数据库操作的基本支持,使得`JdbcDaoImpl`能够执行SQL查询来...

    spring security3.1高级详细开发指南

    在Spring Security 3.1版本中,它提供了多种方式来管理用户认证和授权。本指南将深入讲解如何利用这个框架进行高级开发,通过一个简单的示例和一个复杂的示例来演示不同方法的实现。 首先,Spring Security 3.1的四...

    单点登录SSO解决方案之SpringSecurity+JWT实现.docx

    ### 单点登录SSO解决方案之SpringSecurity+JWT实现 #### 一、单点登录(SSO)概述 单点登录(Single Sign-On,简称SSO)是一种认证机制,允许用户仅通过一次登录就能访问同一域下的多个应用程序和服务。这种机制...

    JavaEE精讲之Spring框架实战 ——学习笔记.zip

    7. **Spring Security**:Spring Security是一个强大且高度可配置的安全框架,用于保护Web应用和RESTful服务。它可以处理认证、授权等安全需求,提供了细粒度的访问控制。 8. **Spring Integration**:这个模块用于...

    spring-security-core-3.1.0.RC1.jar

    在本篇文章中,我们将深入探讨Spring Security的核心库——`spring-security-core-3.1.0.RC1.jar`,以及它在安全领域的应用。 一、Spring Security简介 Spring Security是一款提供全面身份验证、授权和安全访问...

    springboot+mybatis+gradle+thymeleaf+springsecurity

    综上所述,"springboot+mybatis+gradle+thymeleaf+springsecurity"的项目组合,构建了一个功能完善的、安全的Web应用,涵盖了从数据存储、业务处理到用户界面呈现和安全防护的各个层面。开发者可以根据实际需求...

    Spring Security3.pdf

    在Spring Security3中,我们首先会接触到的是其核心概念——访问控制。该框架采用基于角色的访问控制(RBAC)模型,允许开发者定义不同角色以及它们对资源的权限。通过配置XML或使用注解,我们可以为URL、方法甚至...

    maven+springmvc+springsecurity+hibernate框架整合开发源代码

    本项目“maven+springmvc+springsecurity+hibernate框架整合开发源代码”就是一个这样的例子,它巧妙地将四个关键框架——Maven、Spring MVC、Spring Security和Hibernate融合在一起,构建了一个高效且安全的Web应用...

    SpringSecurity 3.0.1.RELEASE.CHM

    1.1. Spring Security是什么? 1.2. 历史 1.3. 发行版本号 1.4. 获得Spring Security 1.4.1. 项目模块 1.4.1.1. Core - spring-security-core.jar 1.4.1.2. Web - spring-security-web.jar 1.4.1.3. Config -...

Global site tag (gtag.js) - Google Analytics