使用错误密码进行Spring安全身份验证成功

时间:2016-05-02 10:29:04

标签: spring authentication spring-security spring-boot

我的WebSecurity配置如下所示;

@EnableWebSecurity
@Configuration
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

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

    @Override
    protected void configure(AuthenticationManagerBuilder builder) throws Exception {
        builder.inMemoryAuthentication().withUser("hellouser")
                .password("hellopass").roles("USER");
    }
}

当我提供错误的用户名时,身份验证会按预期失败。但是,如果我在身份验证方面取得了一次成功,那么之后所有其他请求的密码错误但用户名正确,都会成功通过身份验证....

是否在某处缓存?

我可以禁用此功能吗?

是不是假设密码错误导致身份验证失败?

注意:我正在学习弹簧安全性。我在这个应用程序中没有任何html页面并且从PostMan进行测试。

2 个答案:

答案 0 :(得分:2)

即使使用了错误的凭据,我也可以使用邮递员的基本身份验证从以下配置访问url。这是因为一旦您提供了正确的凭据,凭据就会存储在会话中,即使您在同一会话中重复相同的请求将用于访问该网址。

http.httpBasic().and().authorizeRequests().antMatchers("/secure/admin/**").hasRole("ADMIN").antMatchers("/api/**","/secure/getUserByName/**").hasAnyRole("USER","ADMIN").anyRequest().fullyAuthenticated();

解决方案:

http.sessionManagement()。sessionCreationPolicy(SessionCreationPolicy.STATELESS);

只需添加上面的代码即可,因此此配置可确保一次仅验证用户的单个实例。如果同一用户尝试访问url,则其上一个会话将终止,然后用户必须提供再次为其创建新会话的登录凭据。

答案 1 :(得分:0)

使用http.sessionManagement()。sessionCreationPolicy(SessionCreationPolicy.STATELESS);在配置方法中。