我的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进行测试。
答案 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);在配置方法中。