Springboot Security 5.7版本前后的配置
关于Springboot Security
Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。总之,Spring Security是一个强大且易于使用的框架,可以帮助开发人员提高应用程序的安全性和可靠性。
Spring Security是一个框架,提供 认证(authentication)、授权(authorization) 和 保护,以抵御常见的攻击。它对保护命令式和响应式应用程序有一流的支持,是保护基于Spring的应用程序的事实标准。
参考博客:点我跳转
平时在项目的开发过程当中,因为SpringbootSecurity 5.7版本之后对Config文件的配置做出了一些改变,导致之前的配置被弃用,那么新的配置应该怎么配置呢?
首先在Springboot的5.7版本当中,官方已经标注声明WebSecurityConfigurerAdapter已经过期,在学习的过程当中视频里还是用的老版本,老版本的配置一般为:
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//关闭csrf
.csrf().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
// 对于登录接口 允许匿名访问
.antMatchers("/login").anonymous()
// 除上面外的所有请求全部不需要认证即可访问
.anyRequest().permitAll();
http.logout().disable();
//允许跨域
http.cors();
}
@Override
@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}
新版本的队友配置为:
@Configuration
public class SecurityConfig {
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
return authenticationConfiguration.getAuthenticationManager();
}
@Bean
PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// 关闭csrf保护
.csrf(AbstractHttpConfigurer::disable)
// 设置session管理为无状态
.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
// 配置请求授权
.authorizeHttpRequests(auth -> auth
// 对于登录接口允许匿名访问
.requestMatchers("/login").anonymous()
// 其他所有请求允许访问
.anyRequest().permitAll()
)
// 禁用登出功能
.logout(AbstractHttpConfigurer::disable)
// 允许跨域
.cors(withDefaults());
return http.build();
}
}
在Security 5.7版本之后,configure方法使用了securityFilterChain接收参数HttpSecurity来链式配置,这样子确实方便很多
Security流程图
需要注意的是---.cors()这个方法在6.1版本之后被遗弃,得在参数里面加上跨域的配置
这里我在WebConfig的配置类里实现了WebMvcConfigurer类接口的addCorsMappings方法
withDefaults()其实就是将SpringBoot的全局cors设置传到这个方法里面,由于在WebMvcConfigurer里addcors方法配置了SpringBoot的全局跨域方法,所以其实就是将实现类的参数运用到这个cors里.
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowCredentials(true)
.allowedHeaders("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.maxAge(3600);
}
}
后续如果遇到版本之间用法的问题还是持续更新...接下来就是学习Security的使用和运行原理了.