springsecurity oauth2.0 springboot整合 spring security认证与授权4

本文深入解析SpringSecurity的工作原理,包括认证、授权流程及关键组件的功能,并演示如何在SpringBoot项目中集成SpringSecurity实现用户认证与资源保护。

一 springsecurity

1.1 spring security的作用

Spring Security 所解决的问题就是 安全访问控制 ,而安全访问控 制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源

Spring Security对Web资源的保护是靠Filter实现的,当初始化Spring Security时,会创建一个名为 SpringSecurityFilterChain Servlet过滤器,类型为org.springframework.security.web.FilterChainProxy,它实现了javax.servlet.Filter,因此外部的请求会经过此 类。如下图所示:

FilterChainProxy是一个代理 ,真正起作用的是 FilterChainProxy SecurityFilterChain 所包含的各个 Filter ,同时 这些Filter 作为 Bean Spring 管理,它们是 Spring Security 核心,各有各的职责,但他们并不直接处理用户的 ,也不直接处理用户的 授权 ,而是把它们交给了认证管理器 (AuthenticationManager)和决策管理器 (AccessDecisionManager)进行处理 ,如下图所示:

 1.2 spring security的过滤器的请求过程

spring Security 功能的实现主要是由一 系列过滤器链 相互配合完成

1.SecurityContextPersistenceFilter 这个Filter是整个拦截过程的入口和出口(也就是第一个和最后一个拦截 器) ,会在请求开始时从配置好的 SecurityContextRepository 中获取 SecurityContext ,然后把它设置给 SecurityContextHolder 。在请求完成后将 SecurityContextHolder 持有的 SecurityContext 再保存到配置好 的 SecurityContextRepository ,同时清除 securityContextHolder 所持有的 SecurityContext
2. UsernamePasswordAuthenticationFilter 用于处理来自表单提交的认证 。该表单必须提供对应的用户名和密 码,其内部还有登录成功或失败后进行处理的 AuthenticationSuccessHandler
AuthenticationFailureHandler ,这些都可以根据需求做相关改变;
3.FilterSecurityInterceptor 是用于保护web资源的,使用AccessDecisionManager对当前用户进行授权访问
4.ExceptionTranslationFilter 能够捕获来自 FilterChain 所有的异常,并进行处理 。但是它只会处理两类异常: AuthenticationException 和 AccessDeniedException,其它的异常它会继续抛出
5.Authentication(认证信息)的结构,它是一个接口,我们之前提到的 UsernamePasswordAuthenticationToken就是它的实现之一:

1Authenticationspring security包中的接口,直接继承自Principal类,而Principal是位于 java.security 包中的。它是表示着一个抽象主体身份,任何主体都有一个名称,因此包含一个getName()方法。

2getAuthorities()权限信息列表,默认是GrantedAuthority接口的一些实现类,通常是代表权限信息的一系 列字符串。

3getCredentials()凭证信息,用户输入的密码字符串,在认证过后通常会被移除,用于保障安全。

4getDetails()细节信息,web应用中的实现接口通常为 WebAuthenticationDetails,它记录了访问者的ip地址和sessionId的值

5getPrincipal()身份信息,大部分情况下返回的是UserDetails接口的实现类,UserDetails代表用户的详细 信息,那从Authentication中取出来的UserDetails就是当前登录用户信息,它也是框架中的常用接口之一。

 1.3 spring security认证流程

1.3.1 .认证流程

1. 用户提交用户名、密码被SecurityFilterChain中的 UsernamePasswordAuthenticationFilter 过滤器获取到, 封装为请求Authentication,通常情况下是UsernamePasswordAuthenticationToken这个实现类。

2. 然后过滤器将Authentication提交至认证管理器(AuthenticationManager)进行认证

3. 认证成功后, AuthenticationManager 身份管理器返回一个被填充满了信息的(包括上面提到的权限信息, 身份信息,细节信息,但密码通常会被移除) Authentication 实例。

4. SecurityContextHolder 安全上下文容器将第3步填充了信息的 Authentication ,通过

SecurityContextHolder.getContext().setAuthentication(…)方法,设置到其中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值