spring-security 使用错误密码的Spring Security身份验证成功

k4emjkb1  于 2022-11-11  发布在  Spring
关注(0)|答案(2)|浏览(236)

我的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");
    }
}

当我给予错误的用户名时,验证会失败。但是,如果我一次验证成功,之后所有使用错误密码但正确用户名的请求都会成功验证......
它是否被缓存在某个地方?
我可以禁用此功能吗?
如果密码错误,是否会给予身份验证失败?
注意:我正在学习spring安全。我没有任何html页面在这个应用程序和测试从 Postman 。

3b6akqbq

3b6akqbq1#

请在configure方法中使用http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

@Override
 protected void configure(HttpSecurity http) throws Exception {

        http
                //HTTP Basic authentication
                .httpBasic()
                .and()
                ....
                .csrf().disable()
                .formLogin().disable();

        //to check password in each request
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
xzlaal3s

xzlaal3s2#

我能够从下面的配置使用基本认证从 Postman 访问网址,即使与错误的凭据.这是发生的,因为一旦你提供正确的凭据凭据得到存储在会话中,即使你重复相同的请求,相同的会话将用于访问网址.

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

解决方案:

在这个例子中,我们使用了一个简单的方法来创建一个会话。
只需添加上面的代码。因此,这种配置确保了一次只对一个用户的一个示例进行身份验证。如果同一个用户试图访问该url,则其先前的会话将被终止,然后该用户必须再次提供登录凭据,以便创建新的会话。

相关问题