弹簧安全缓存我的身份验证

2022-09-04 01:05:42

我刚刚在我的Spring Boot项目类路径中添加了Spring Security。我没有执行 Java 配置或 XML 配置。

问题是,当我向我的资源 localhost:8080/users 发送请求时,我的第一个请求通常会进行身份验证(通过基本身份验证),但后续请求不需要任何身份验证标头。即使我重新启动服务器,请求仍在进行身份验证,而无需输入任何凭据。

我想关闭此“缓存”。

我尝试了很多客户。Postman, SOAP-UI, browsers..已经读过这个,但没有工作


答案 1

您必须将会话创建策略设置为无状态。否则,Spring Security将使用cookie。

(您可以在 Postman 的 Cookie 菜单中的发送按钮下方删除 Cookie。

配置示例:

@Configuration
@EnableWebSecurity(debug = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

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

    ...

}

答案 2

我的开箱即用弹簧执行器遇到了这个问题。

我不得不添加:到我的班级。.and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);ActuatorSecurityConfig

package com.foo;
import org.springframework.boot.actuate.autoconfigure.security.servlet.EndpointRequest;
import org.springframework.boot.actuate.context.ShutdownEndpoint;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;

@Configuration
public class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .authorizeRequests()
                .requestMatchers(EndpointRequest.to(ShutdownEndpoint.class))
                .denyAll()
                .requestMatchers(EndpointRequest.toAnyEndpoint())
                .hasRole("ACTUATOR_ADMIN")
                .requestMatchers(PathRequest.toStaticResources().atCommonLocations())
                .permitAll()
                .antMatchers("/foo/**")
                .permitAll()
                .antMatchers("/**")
                .authenticated()
                .and()
                .httpBasic()
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

    }
}

推荐