Spring Boot安全性-inMemoryAuthentication不起作用

时间:2019-03-21 10:54:13

标签: spring-boot spring-security

这是我的安全配置代码:

@EnableWebSecurity
@EnableGlobalMethodSecurity (
        prePostEnabled=true
    )
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception{
        auth.inMemoryAuthentication()
                .withUser("chandra").password("{noop}1234").roles("USER").and()
                .withUser("admin").password("{noop}admin123").roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/addItem","/delete").hasRole("ADMIN")
                .antMatchers("/getAllItems").hasRole("USER")
                .and().csrf().disable().headers().frameOptions().disable()
                .and()
                .formLogin();
    }
}

但是在编译spring时,它仍然为我生成密码。

Using generated security password: 49f04bde-ac1f-4e30-870b-ba0dd93d50f3

我检查了打印语句是否正在加载配置,发现安全配置正在加载。我应该进行任何更改以使其与给定的用户名和密码一起使用。

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以想像,这是有关纯文本密码的默认提示,接下来会发生什么。 :-)

无论出于何种测试目的,您都可以在@Configuration类中定义一个无操作密码编码器:

要使您noop开头的工作正常,请确保公开以下bean:

@Bean
public PasswordEncoder passwordEncoder() {
    return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
  

有关更多信息,请咨询相应的chapter in the reference manual。   或者,您可以提供良好的旧密码管理器本身:

import org.springframework.security.crypto.password.PasswordEncoder;

[…]

@Bean
public NoOpPasswordEncoder passwordEncoder() {
    return NoOpPasswordEncoder.getInstance();
}