当前位置: 首页 > 知识库问答 >
问题:

无状态应用程序Spring Security

漆雕奇
2023-03-14

我正在用Spring Web、Spring Security和Spring social创建一个Spring启动应用程序。该应用程序包含利用基本身份验证实现安全的rest服务。我试图将Spring配置为使应用程序无状态,但是当我使用浏览器向web服务发出请求时,浏览器会提示输入用户凭据,但由于会话创建,所有之前的请求都使用相同的用户凭据。我已将应用程序配置为阻止这种情况发生,但仍然存在问题\

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

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

共有2个答案

姬经义
2023-03-14

看看这个:

    http
  .sessionManagement()
  .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
  .and()
  .csrf().disable()
  .authorizeRequests()
  .antMatchers(HttpMethod.OPTIONS, "/**").permitAll() //allow CORS option calls
  .antMatchers("/resources/**").permitAll()
  .anyRequest().authenticated()
  .and()
  .httpBasic();
司寇安宜
2023-03-14

Spring security基于一种叫做SecurityContext的东西。这是一个ThreadLocal,例如一次只在一个线程上存在。每个请求都将位于其自己的线程上,并且将无法访问任何受保护的资源,除非SecurityContext设置为包含适当的角色。因此,即使您刚刚登录,在幕后将角色插入SecurityContext,安全上下文也会消失,就像它是另一个用户一样。代币是你处理这个问题的方式。或者base64将你的用户名和密码编码到每一个请求中,无论你的船在哪里。

 类似资料:
  • For example, here’s how you would select the object: And to fetch the counter’s currentValue, we can pass in a string array, where each string plucks a single property from the application state one a

  • 我试图运行启动示例Spring安全saml引导从,https://github.com/vdenotaris/spring-boot-security-saml-sample 我能够运行它并与身份提供者集成。 但是,我看到每次都创建一个会话,并且在用户退出之前保持持久。 我在spring boot中使用基于资源的服务,因此不想增加会话的开销。 我尝试将以下行添加到配置方法中,http.sessio

  • 我正在创建在状态栏中显示通知图标的应用程序。当用户打开状态栏并点击图标时,应用程序应该被启动。 我正在寻找一种方法来避免在这次发布期间重新创建应用程序。我已经创建了测试应用程序,并将日志消息添加到处理程序onCreate、onRestart、onResume、onStop和onDestroy中。日志消息说明了问题: 用户启动应用程序-onCreate、onResume 步骤7的行为与步骤3和5的行

  • 处理事件时,如果jar应用程序向任务管理器抛出异常,会发生什么情况? a) Flink作业管理器将杀死现有的任务管理器并创建新的任务管理器? b) 任务管理器本身使用RocksDB中保存的本地状态从失败的执行和重启过程中恢复? 我有一个疑问,如果相同类型的错误事件被每个可用的任务管理器处理,因此它们都被杀死,整个flink工作被关闭。 我注意到,如果出现一些应用程序错误,那么最终整个工作都会失败。

  • 目前,我们使用Spring 4,有一个Java类加载所有xml配置文件: 根:基本框架 儿童:项目申请服务 子项目:项目申请工作流 子:框架控制器 子:CXF Web应用程序上下文 每个孩子都知道自己父母的想法,一切都很顺利。现在,我必须在Websphere应用服务器上使用IBM EJB与遗留系统进行通信。这个EJB被调用,现在我想使用我们的Spring上下文来获得一些服务。 EJB被定义为 我已

  • 问题内容: 我正在尝试在应用程序中保存缓存字典。 据我了解,应使用Application Context,尤其是flask.g对象。 设定: 现在,如果我这样做: 它打印。 继续执行以下操作: 我不明白,文档也完全没有帮助。如果我正确阅读它们,状态应该已经保留。 我的另一个想法是简单地使用模块范围的变量: 但是似乎这些随着每个请求而重置。 如何正确做到这一点? 编辑:flask10.1 问题答案: