Spring Security

113 阅读2分钟

Spring Security

1.是什么

基于spring提供的安全性框架,能搞在web请求级别和方法级别调用,处理身份验证和权限校验

1.web请求级别:使用servlet过滤器保护web请求并限制URL级别的访问

2.方法调用级别:使用Spring AOP保护方法调用,确保具有适当权限的用户采用访问安全保护的方法.

2.优点

  • Spring Security 是一个相对复杂的安全管理框架,功能比 Shiro 更加强大,权限控制细粒度更高,对 OAuth 2 的支持也更友好。
  • 由于 Spring Security 源自 Spring 家族,因此可以和 Spring 框架无缝整合,特别是 Spring Boot 中提供的自动化配置方案,可以让 Spring Security 的使用更加便捷。

3.原理

以web应用为例,通常会配置一系列的filter及逆行权限校验,SpringSecurity也是基于Filter的。

DelegatingFilterProxy

DelegatingFilterProxy是一个特殊的filter,存在于spring-web模块中。DelegatingFilterProxy通过继承GenericFilterBean使得自己变为了一个Filter(因为GenericFilterBean implements Filter)。它是一个Filter,其命名却以proxy结尾。

@EnableWebSecurity

在使用spring boot之后,这一xml配置被Java类配置给代替了。我们前面在代码种使用过@EnableWebSecurity 注解,通过跟踪源码可以发现@EnableWebSecurity会加载WebSecurityConfiguration类,而WebSecurityConfiguration类中就有创建springSecurityFilterChain

二、核心组件

2.1 SecurityContextHolder,SecurityContext 和 Authentication

SecurityContext

安全上下文,用户通过Spring Security 的校验之后,验证信息存储在SecurityContext中

SecurityContextHolder

最基本的对象是 SecurityContextHolder,它是我们存储当前应用程序安全上下文的详细信息,其中包括当前使用应用程序的主体的详细信息。如当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限等。

默认情况下,SecurityContextHolder 使用 ThreadLocal 来存储这些详细信息,这意味着 Security Context 始终可用于同一执行线程中的方法,即使 Security Context 未作为这些方法的参数显式传递。

Authentication

authentication 直译过来是“认证”的意思,在Spring Security 中Authentication用来表示当前用户是谁,一般来讲你可以理解为authentication就是一组用户名密码信息。Authentication也是一个接口,用于获取用户的角色信息,密码,用户名等。