java - 无状态应用程序 Spring Security

标签 java spring spring-security spring-boot

我正在使用 Spring Web、Spring Security 和 Spring Social 创建一个 Spring boot 应用程序。该应用程序包含利用基本身份验证来确保安全的其余服务。我正在尝试配置 Spring 以使应用程序无状态,但是当我使用浏览器向 Web 服务发出请求时,浏览器会提示输入用户凭据,但由于 session 创建,所有先前的请求都使用相同的用户凭据。我已经配置了应用程序来阻止这种情况发生,但仍然存在问题。\

public class SecurityConfig extends WebSecurityConfigurerAdapter{
    @override
    protected void configure(HttpSecurity http) throws Exception{
        http.sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/**")
            .hasRole("USER")
            .andBasic();
    }

    @override
    protected void configure(AuthenticatioinManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
            .withUser("some@gmail.com")
            .password("12345")
            .role("USER");
    }
}

我应该更改或添加什么才能获得此功能。

最佳答案

Spring 安全性基于称为 SecurityContext 的东西。这是一个 ThreadLocal,例如一次仅存在于一个线程上。每个请求都将在其自己的线程上进行,并且无法访问任何 protected 资源,除非将 SecurityContext 设置为包含适当的角色。因此,即使您刚刚登录,在幕后将角色插入到 SecurityContext 中,该安全上下文也会消失,就像它是另一个用户一样。 token 是您想要处理此问题的方式。或者将您的用户名和密码进行 Base64 编码到每个请求中,无论您的情况如何。

关于java - 无状态应用程序 Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31797602/

相关文章:

java - Jsoup 将 Element 转换为 TextNode 会导致异常

java - 如何修复从网页获取报告时抛出的 IllegalStateException

java - Spring MVC 填充 @RequestParam Map<String, String>

Java Spring 安全 : 401 Unauthorized for token OAuth2 end point

spring-security - 使用 BCryptPasswordEncoder 时获得相同的哈希值

java - 根据用户输入删除重复的单词或字符

java - JAXB2,如何根据包含 xsd :any element? 的 XML 架构进行部分验证

java - 创建两个 Rectangle 对象时出现问题

java - 嵌入式实体的 Spring Data Rest 投影

grails - Grails-在不更改URL的情况下检索“注册”页面或主页