spring security 的核心功能主要包括:
认证 (你是谁)授权 (你能干什么)攻击防护 (防止伪造身份)
其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式
会检查是否是一个登录请求;
是否包含username 和 password (也就是该过滤器需要的一些认证信息) ;
如果不满足则放行给下一个。
记住几个类:
webSecurityConfigurerAdapter:自定义Security策略
AuthenticationManagerBuilder:自定义认证策略
@EnableWebSecurity:开启WebSecurity模式
Spring Security的两个主要目标是“认证"和“授权”(访问控制)。
“认证”(Authentication)
“授权”(Authorization)
Eg
创建spring boot项目导入pom主要依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
自己设计一个登录页面
如果只实现一个WebSecurityConfigurerAdapter然后重写一下configure方法,效果会默认使用springsecurity的登录页 ,以及项目启动时后台会打印出一个默认的密码,然后使用任意账号就可以进行登录访问指定的资源
/**
* 表单登陆security
* 安全 = 认证 + 授权
*/
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
//以下五步是表单登录进行身份认证最简单的登陆环境
http.formLogin() //表单登陆 1
.and() //2
.authorizeRequests() //下面的都是授权的配置 3
.anyRequest() //任何请求 4
.authenticated(); //访问任何资源都需要身份认证 5
}
}
配置需要的过滤器!
configure(HttpSecurity httpSecurity):用于配置需要拦截的url路径、jwt过滤器及出异常后的处理器;configure(AuthenticationManagerBuilder auth):用于配置UserDetailsService及PasswordEncoder;RestfulAccessDeniedHandler:当用户没有访问权限时的处理器,用于返回JSON格式的处理结果;RestAuthenticationEntryPoint:当未登录或token失效时,返回JSON格式的结果;UserDetailsService:SpringSecurity定义的核心接口,用于根据用户名获取用户信息,需要自行实现;UserDetails:SpringSecurity定义用于封装用户信息的类(主要是用户信息和权限),需要自行实现;PasswordEncoder:SpringSecurity定义的用于对密码进行编码及比对的接口,目前使用的是BCryptPasswordEncoder;JwtAuthenticationTokenFilter:在用户名和密码校验前添加的过滤器,如果有jwt的token,会自行根据token信息进行登录。
主要就是继承类,重写方法!像是登录权限过滤,登出过滤==!