Spring Security 是一个安全框架,它提供了一系列的安全机制,下面我就来详解Spring Security @mikechen
Spring Security定义
Spring Security是一个开源的安全框架,主要用于认证和授权,它基于Spring框架,提供了一组能够集成到任何Spring应用程序中的安全性服务。
Spring Security作用
Spring Security主要用于对应用程序进行身份验证和授权,提供了一系列的安全性服务,包括:
- 访问控制:控制用户对不同资源的访问权限;
- 认证:验证用户身份是否合法;
- 授权:确定用户是否被允许执行特定操作;
- Session管理:管理用户的Session信息,包括过期时间、并发控制等;
- 密码加密:将用户密码进行加密处理,增加安全性。
Spring Security使用
1.添加Spring Security的依赖
<!-- Spring Security 核心模块 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.5.0</version> </dependency> <!-- Spring Security Web模块,用于支持Web应用程序安全 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>5.5.0</version> </dependency> <!-- Spring Security配置支持 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>5.5.0</version> </dependency>
2.配置Spring Security
在Spring配置文件中,可以配置Spring Security的相关属性,例如认证方式、权限控制、Session管理等。
<beans:beans xmlns="http://www.springframework.org/schema/security" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-5.5.xsd"> <!-- 配置认证方式 --> <authentication-manager> <authentication-provider> <user-service> <user name="user" password="{noop}password" authorities="ROLE_USER" /> </user-service> </authentication-provider> </authentication-manager> <!-- 配置权限控制 --> <http> <intercept-url pattern="/admin/**" access="ROLE_ADMIN" /> <form-login /> <logout /> </http> </beans:beans>
3.使用Spring Security
创建一个安全配置类,并在其中定义需要保护的资源。
@Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers("/", "/home").permitAll() .anyRequest().authenticated() .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout()
4.运行应用程序并测试
启动应用程序,并访问需要保护的资源/admin/**
,此时会弹出一个基本身份验证的窗口,输入用户名和密码,即可访问受保护的资源。
Spring Security原理
Spring Security的核心原理是使用一系列的过滤器链对请求进行处理,过滤器链是由许多过滤器(Filter)组成的。
如下图所示:
每个过滤器负责不同的安全性功能,如用户认证、用户授权、会话管理、跨站点请求伪造防护等等。
在过滤器链中,最核心的是SecurityFilterChain
,它是一个过滤器链的集合,每个SecurityFilterChain
对象包含一个或多个过滤器,并匹配特定的请求。
如下图所示:
Spring Security的另一个核心概念是SecurityContextHolder,它用于在当前线程中存储和访问SecurityContext对象,SecurityContext对象是Spring Security的核心数据结构,包含了当前用户的安全性信息,如用户的认证状态、权限等等。
总之,Spring Security通过一系列的过滤器链和安全性相关的核心概念来实现安全性保护,其核心是SecurityFilterChain
和SecurityContext
。
以上就是Spring Security的详解,更多Spring内容请查看:Spring教程(史上最全图文详解)
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》