一、Spring Security:
1、简介:Spring Security 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。
(1)用户认证:指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。
Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。
(2)用户授权:指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。
Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。
2、结构:通过继承
org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter
实现权限配置,登录验证成功后初始化org.springframework.security.core.userdetails.UserDetails,存储当前登录用户。默认(可缺省)登录接口:/login
二、 spring security 依赖:
1、pom依赖:
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.14.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId></dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-config</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
2、springBoot 和 spring security 版本对应关系:
springboot 版本 spring security版本
2.3.12.RELEASE 5.3.9.RELEASE
2.3.11.RELEASE 5.3.9.RELEASE
2.3.10.RELEASE 5.3.9.RELEASE
2.3.9.RELEASE 5.3.8.RELEASE
2.3.8.RELEASE 5.3.6.RELEASE
2.3.7.RELEASE 5.3.6.RELEASE
2.3.6.RELEASE 5.3.5.RELEASE
2.3.5.RELEASE 5.3.5.RELEASE
2.3.4.RELEASE 5.3.4.RELEASE
2.3.3.RELEASE 5.3.4.RELEASE
2.3.2.RELEASE 5.3.3.RELEASE
2.3.1.RELEASE 5.3.3.RELEASE
2.3.0.RELEASE 5.3.2.RELEASE
2.2.13.RELEASE 5.2.8.RELEASE
2.2.12.RELEASE 5.2.8.RELEASE
2.2.11.RELEASE 5.2.7.RELEASE
2.2.10.RELEASE 5.2.6.RELEASE
2.2.9.RELEASE 5.2.5.RELEASE
2.2.8.RELEASE 5.2.5.RELEASE
2.2.7.RELEASE 5.2.4.RELEASE
2.2.6.RELEASE 5.2.2.RELEASE
2.2.5.RELEASE 5.2.2.RELEASE
2.2.4.RELEASE 5.2.1.RELEASE
2.2.3.RELEASE 5.2.1.RELEASE
2.2.2.RELEASE 5.2.1.RELEASE
2.2.1.RELEASE 5.2.1.RELEASE
2.2.0.RELEASE 5.2.0.RELEASE
2.1.18.RELEASE 5.1.13.RELEASE
2.1.17.RELEASE 5.1.12.RELEASE
2.1.16.RELEASE 5.1.11.RELEASE
2.1.15.RELEASE 5.1.11.RELEASE
2.1.14.RELEASE 5.1.10.RELEASE
2.1.13.RELEASE 5.1.8.RELEASE
2.1.12.RELEASE 5.1.7.RELEASE
2.1.11.RELEASE 5.1.7.RELEASE
2.1.10.RELEASE 5.1.7.RELEASE
2.1.9.RELEASE 5.1.6.RELEASE
2.1.8.RELEASE 5.1.6.RELEASE
2.1.7.RELEASE 5.1.6.RELEASE
2.1.6.RELEASE 5.1.5.RELEASE
2.1.5.RELEASE 5.1.5.RELEASE
2.1.4.RELEASE 5.1.5.RELEASE
2.1.3.RELEASE 5.1.4.RELEASE
2.1.2.RELEASE 5.1.3.RELEASE
2.1.1.RELEASE 5.1.2.RELEASE
2.1.0.RELEASE 5.1.1.RELEASE
2.0.9.RELEASE 5.0.12.RELEASE
2.0.8.RELEASE 5.0.11.RELEASE
2.0.7.RELEASE 5.0.10.RELEASE
2.0.6.RELEASE 5.0.9.RELEASE
2.0.5.RELEASE 5.0.8.RELEASE
2.0.4.RELEASE 5.0.7.RELEASE
2.0.3.RELEASE 5.0.6.RELEASE
2.0.2.RELEASE 5.0.5.RELEASE
2.0.1.RELEASE 5.0.4.RELEASE
2.0.0.RELEASE 5.0.3.RELEASE
1.5.22.RELEASE 4.2.13.RELEASE
1.5.21.RELEASE 4.2.12.RELEASE
1.5.20.RELEASE 4.2.12.RELEASE
1.5.19.RELEASE 4.2.11.RELEASE
1.5.18.RELEASE 4.2.10.RELEASE
1.5.17.RELEASE 4.2.9.RELEASE
1.5.16.RELEASE 4.2.8.RELEASE
1.5.15.RELEASE 4.2.7.RELEASE
1.5.14.RELEASE 4.2.7.RELEASE
1.5.13.RELEASE 4.2.6.RELEASE
1.5.12.RELEASE 4.2.5.RELEASE
1.5.11.RELEASE 4.2.5.RELEASE
1.5.10.RELEASE 4.2.4.RELEASE
1.5.9.RELEASE 4.2.3.RELEASE
1.5.8.RELEASE 4.2.3.RELEASE
1.5.7.RELEASE 4.2.3.RELEASE
1.5.6.RELEASE 4.2.3.RELEASE
1.5.5.RELEASE 4.2.3.RELEASE
1.5.4.RELEASE 4.2.3.RELEASE
1.5.3.RELEASE 4.2.2.RELEASE
1.5.2.RELEASE 4.2.2.RELEASE
1.5.1.RELEASE 4.2.1.RELEASE
1.5.0.RELEASE 4.2.1.RELEASE
1.4.7.RELEASE 4.1.4.RELEASE
1.4.6.RELEASE 4.1.4.RELEASE
1.4.5.RELEASE 4.1.4.RELEASE
1.4.4.RELEASE 4.1.4.RELEASE
1.4.3.RELEASE 4.1.4.RELEASE
1.4.2.RELEASE 4.1.3.RELEASE
1.4.1.RELEASE 4.1.3.RELEASE
1.4.0.RELEASE 4.1.1.RELEASE
1.3.8.RELEASE 4.0.4.RELEASE
1.3.7.RELEASE 4.0.4.RELEASE
三、核心组件:
1、Authentication 认证:Authentication接口就是用来携带认证信息的。认证信息包括用户身份信息,密码,及权限列表等;
2、UsernamePasswordAuthenticationFilter:账号密码认证过滤器,用于认证用户信息,认证方式是由 AuthenticationManager 接口提供。
3、AuthenticationManager:认证管理器,是认证相关的核心接口,也是发起认证的出发点。实际业务中可能根据不同的信息进行认证,所以Spring推荐通过实现 AuthenticationManager 接口来自定义自己的认证方式。Spring 提供了一个默认的实现 ProviderManager。
4、ProviderManager:认证提供者管理器,该类中维护了一个认证提供者列表,只要这个列表中的任何一个认证提供者提供的认证方式认证通过,认证就结束。
5、AuthenticationProvider:认证提供者,这是一个接口,具体如何认证,就看如何实现该接口。Spring Security 提供了 DaoAuthenticationProvider 实现该接口,这个类就是使用数据库中数据进行认证。
6、UserDetailsService:根据用户名获取用户详细信息
7、UserDetails:用户的详细信息,主要用于登录认证。
8、SecurityContextHolder:是最基本的对象,它负责存储当前 SecurityContext 信息。SecurityContextHolder默认使用 ThreadLocal 来存储认证信息,意味着这是一种与线程绑定的策略。在Web场景下的使用Spring Security,在用户登录时自动绑定认证信息到当前线程,在用户退出时,自动清除当前线程的认证信息。
9、SecurityContext:负责存储认证通过的用户信息(Authentication对象),保存着当前用户是什么,是否已经通过认证,拥有哪些权限等等。
10、AuthenticationSuccessHandler:主要用于认证成功后的处理,比如返回页面或者数据。
11、AuthenticationFailureHandler:主要用于认证失败后的处理,比如返回页面或者数据。
12、AccessDecisionManager:主要用于实现权限,决定请求是否具有访问的权限。
13、AccessDeniedHandler:主要用于无权访问时的处理