在Spring Security 5.0之后,Spring团队引入了一种新的安全配置方式,逐步淘汰了传统的WebSecurityConfigurerAdapter类。这一变化旨在使安全配置更加简单易懂,同时也推动开发者使用更为现代的编程风格,比如使用Java配置而不是XML配置。以下将详细介绍如何在没有WebSecurityConfigurerAdapter的情况下进行Spring Security配置。

新的Spring Security配置方式

在新的配置方式中,我们直接使用SecurityFilterChainUserDetailsService等组件进行安全配置,而不再依赖于WebSecurityConfigurerAdapter的继承和重写方法。

1. 引入依赖

首先,我们需要在pom.xml中添加Spring Security的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

2. 创建安全配置类

接下来,我们可以创建一个安全配置类,使用SecurityFilterChain进行配置。以下是一个简单的示例,展示了如何配置HTTP请求的安全性,并设置用户的身份验证信息。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/public/**").permitAll() // 允许公共访问
                .anyRequest().authenticated() // 其它请求需认证
                .and()
            .formLogin() // 表单登录
                .loginPage("/login")
                .permitAll()
                .and()
            .logout() // 登出功能
                .permitAll();

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // 使用BCrypt加密密码
    }

    @Bean
    public InMemoryUserDetailsManager userDetailsService() throws Exception {
        UserDetails user = User.withUsername("user")
            .password(passwordEncoder().encode("password"))
            .roles("USER") // 授予USER角色
            .build();

        return new InMemoryUserDetailsManager(user); // 在内存中管理用户
    }
}

在这个示例中,我们定义了一个安全过滤链securityFilterChain,并指定了哪些请求是公共的(不需要认证的),哪些请求需要认证。我们还定义了表单登录的具体配置。

3. 测试安全配置

为了测试这一配置,我们可以启动Spring Boot应用程序,访问配置的登录页面。当用户输入正确的用户名和密码后,就可以看到访问受保护资源的成功返回。

总结

通过不再依赖WebSecurityConfigurerAdapter,Spring Security的配置变得更加灵活和易于理解。在新的架构中,我们可以使用SecurityFilterChainUserDetailsService等组件进行配置,同时也可以通过Spring的强大功能进行定制化配置。整体而言,这一变化使得安全配置更符合现代开发的趋势,提高了开发效率和代码的可维护性。通过这种新的方式,我们可以轻松实现安全控制,同时保持代码的简洁和清晰。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部