📜  如何在 Spring Security 中更改默认用户和密码?(1)

📅  最后修改于: 2023-12-03 15:38:26.684000             🧑  作者: Mango

如何在 Spring Security 中更改默认用户和密码?

简介

Spring Security 是一个基于 Spring 的安全框架,为企业应用系统提供了一套完整的安全解决方案。在默认情况下,Spring Security 会为我们提供一个内置的用户和密码,但是在实际开发中,我们往往需要更改默认用户和密码,本文将介绍如何在 Spring Security 中更改默认用户和密码。

步骤
第一步:创建安全配置类

在 Spring Security 中,我们需要创建一个配置类来进行安全配置。首先,我们需要在类上使用 @EnableWebSecurity 注解来启用 Spring Security:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // ...
}
第二步:配置用户和密码

在安全配置类中,我们可以使用 UserDetailsService 接口或 UserDetailsManager 接口来配置用户和密码。其中,UserDetailsService 接口需要实现 loadUserByUsername 方法,该方法用于根据用户名加载用户信息。而 UserDetailsManager 接口则可以直接使用 User 类型对象来创建用户。

通过 UserDetailsService 配置用户和密码

以下代码演示了如何通过 UserDetailsService 接口配置用户和密码:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    protected void configure(AuthenticationManagerBuilder builder) throws Exception {
        builder
                .userDetailsService(userDetailsService())
                .passwordEncoder(passwordEncoder());
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User
                .withUsername("username")
                .password("password")
                .roles("USER")
                .build());
        return manager;
    }
}

在上面的示例中,我们使用 InMemoryUserDetailsManager 类来实现 UserDetailsService 接口,并在 userDetailsService 方法中返回该类的实例。在 configure 方法中,我们调用 userDetailsService 方法来配置用户详细信息,另外我们还使用 passwordEncoder 方法来配置密码加密方式,这里使用了 BCryptPasswordEncoder 类。

直接通过 UserDetailsManager 配置用户和密码

以下代码演示了如何通过 UserDetailsManager 接口配置用户和密码:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    protected void configure(AuthenticationManagerBuilder builder) throws Exception {
        builder
                .userDetailsManager(userDetailsManager());
    }

    @Bean
    public UserDetailsManager userDetailsManager() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User
                .withUsername("username")
                .password("password")
                .roles("USER")
                .build());
        return manager;
    }
}

在上面的示例中,我们使用 InMemoryUserDetailsManager 类来实现 UserDetailsManager 接口,并在 userDetailsManager 方法中返回该类的实例。在 configure 方法中,我们调用 userDetailsManager 方法来配置用户详细信息。

第三步:访问受保护资源

在 Spring Security 中,我们可以通过 @PreAuthorize@Secured 注解来对方法或 URL 进行访问控制,这里不再赘述。

总结

通过以上步骤,我们可以在 Spring Security 中更改默认用户和密码。我们可以根据实际需求来选择使用 UserDetailsService 接口或 UserDetailsManager 接口来配置用户和密码。另外,还可以通过 PasswordEncoder 接口来配置密码加密方式。