SpringSecurity笔记

Spring Security 初始化

  1. 导入依赖
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>6.1.1</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>6.1.1</version>
</dependency>
  1. 创建SecurityInitializer
package com.example.init
public class SecurityInitializer extends AbstractSecurityWebApplicationInitializer {
//不用重写任何内容
//这里实际上会自动注册一个Filter,SpringSecurity底层就是依靠N个过滤器实现的,我们之后再探讨
}
  1. 创建配置类
package com.example.config
@Configuration
@EnableWebSecurity //开启WebSecurity相关功能
public class SecurityConfiguration {

}
  1. MainInitializer添加配置文件
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{MainConfiguration.class, SecurityConfiguration.class};
}

Post表单认证

在POST请求中需要携带页面中的csrfToken,否则一律进行拦截操作

<input type="text" th:id="${_csrf.getParameterName()}" th:value="${_csrf.token}" hidden>

密码加密

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

//将BCryptPasswordEncoder直接注册为Bean,Security会自动进行选择
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}

使用

encoder.encode(yourPassword);

关闭CSFR

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.csfr(conf -> {
// 关闭CSFR
conf.disable();
})
}
}

自定义登录页

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
// 验证请求拦截和放行配置
.authorizeHttpRequests(auth -> {
// 将所有请求全部拦截,一律需要验证
auth.anyRequest().authenticated();
})
// 表单登录相关配置
.formLogin(conf -> {
conf.loginPage("/login"); // 将登录页设置为我们自己的登录页面
conf.loginProcessingUrl("/doLogin"); // 登录表单提交的地址,可以自定义
conf.defaultSuccessUrl("/"); // 登录成功后跳转的页面
conf.permitAll(); // 将登录相关的地址放行,否则未登录的用户无法进入登录界面
// 用户名和密码的表单字段名称
conf.usernameParameter("username");
conf.passwordParameter("password");
})
// 退出登录
.logout(conf -> {
...
})
.build();
}
}

记住密码

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.rememberMe(conf -> {
conf.alwaysRemember(false);
})