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来链式配置,这样子确实方便很多
image
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的使用和运行原理了.

posted @ 2024-09-20 22:40  MingHaiZ  阅读(44)  评论(0编辑  收藏  举报