无法在spring引导安全中使用基本身份验证登录

vcirk6k6  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(380)

当我尝试使用inmemory用户名和密码登录时,它总是抛出无效消息。

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .authorizeRequests()
        .anyRequest()
        .authenticated()
        .and()
        .httpBasic();
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }

在此处输入图像描述
即使我输入了正确的用户名和密码,此对话框也会始终显示。

esbemjvw

esbemjvw1#

在configureglobal(…)中,我们需要使用像bcryptpasswordencoder这样的密码编码器,或者如果我们不想使用任何密码编码器,那么我们必须像password({noop}password)一样写入密码。{noop}意味着使用nooppasswordencoder来验证此密码。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
    .withUser("user").password("{noop}password").roles("USER");
}
hmtdttj4

hmtdttj42#

因为您使用的是inmemoryauth,所以我假设您这样做是为了学习spring,并且您的密码是“password”。在这种情况下,您还应该让spring知道您输入的明文密码应该按原样使用,这是通过使用nooppasswordencoder完成的。

@Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth)
            throws Exception {
        auth
            .inMemoryAuthentication()
               .passwordEncoder(NoOpPasswordEncoder.getInstance())
               .withUser("user").password("password").roles("USER");
    }

nooppasswordencoder将显示为已弃用,因为它不打算在一般情况下使用。

相关问题