【问题标题】:Unable to retrieve security context from within Spring-Jersey无法从 Spring-Jersey 中检索安全上下文
【发布时间】:2011-04-16 08:13:07
【问题描述】:

我正在尝试在我的 spring-jersey bean 中检索安全上下文,但是我不断获得 Null 身份验证。当我在我的 spring 应用程序中运行相同的命令时,它会正确检索当前登录的用户安全上下文。

spring-jersey 的配置需要为主要的spring应用创建一个单独的servlet,因此web.xml有两个servlet——一个用于spring app,第二个用于jersey rest api。

假设问题与此有关,我尝试将安全上下文共享模式设置为全局,但我仍然无法从 Jersey 中获取上下文信息。

SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL)

对此的任何帮助将不胜感激!

非常感谢, 奈杰尔

【问题讨论】:

    标签: java spring spring-security jersey


    【解决方案1】:

    @axtavt 感谢您的评论。这条线索帮助解决了我的问题,检查了我的安全过滤器是如何配置的,我在我的 spring 安全配置中找到了这一行

    <security:intercept-url pattern="/api/**" filters="none" />  
    

    此行有效地禁用了所有 spring 安全过滤器,删除它修复了问题。

    非常感谢您的帮助:)

    【讨论】:

      【解决方案2】:

      也许用户根本没有经过身份验证,因为您的 Jersey 请求没有会话 cookie,因此与经过身份验证的用户的会话没有关联?

      您可以通过在 Spring Security 中启用匿名身份验证来检查它 - 如果猜测正确,您应该获得匿名身份验证而不是 null

      【讨论】:

      • 我启用了匿名身份验证,就像您建议的那样,我希望配置的用户会出现,但它不会在泽西岛出现。但是,当我未在我的 spring 应用程序中进行身份验证时,配置的用户将显示而不是 null!我可以看到您关于会话 cookie 的观点,我可以使用 @Context HttpServletRequest req 从我的 Jersey 代码中检索会话 cookie,然后从那里检索会话。然而,SecurityContextHolder 是独立于我所理解的(?)的会话。
      • @Nigel:是的,它独立于会话,但对于经过身份验证的用户,它是由 Spring Security 过滤器从会话属性中填充的。那么,您的 Jersey 请求是否由 Spring Security 过滤器处理?
      • 感谢您的评论。这条线索帮助解决了我的问题,检查了我的安全过滤器是如何配置的,我在我的 spring 安全配置中找到了这一行
          删除这个解决了这个问题,它有效地禁用了所有 spring 安全过滤器!非常感谢您的帮助:)
      猜你喜欢
      • 2015-09-13
      • 2015-12-16
      • 2016-07-23
      • 1970-01-01
      • 2011-07-08
      • 2019-06-15
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多