2010-09-23 58 views
1

我想在我的spring-jersey bean中检索安全上下文,但是我一直在获取Null身份验证。当我在我的Spring应用程序中运行相同的命令时,它会正确地检索当前登录的用户安全上下文。无法从Spring-Jersey中检索安全上下文

Spring-Jersey的配置需要为主应用程序创建一个单独的servlet,因此web.xml有两个servlet - 一个用于spring应用程序,另一个用于平台休息API。

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

SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_GLOBAL) 

任何帮助,将不胜感激!

非常感谢, 奈杰尔

回答

2

用户也许根本就没有认证的,因为你的球衣的请求没有会话cookie,因此不与验证的用户会话相关联?

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

+0

非常感谢我有匿名认证功能,像你这样的建议,我本来期望配置的用户展现出来,但它在新泽西州不一样。但是,当我未在我的春季应用程序中进行身份验证时,配置的用户显示而不是null! 我可以看到您关于会话cookie的观点,我可以使用@Context HttpServletRequest req从我的Jersey代码检索会话cookie,然后从那里检索会话。然而SecurityContextHolder是独立于我所理解的(?)的会话。 – 2010-09-23 16:35:19

+0

@Nigel:是的,它独立于会话,但对于经过身份验证的用户,它由Spring Security过滤器从会话属性填充。那么,您是否使用Spring Security过滤器处理Jersey请求? – axtavt 2010-09-23 16:41:42

+0

感谢您的评论。这个线索帮助我解决了我的问题,检查我的安全过滤器是如何配置的,我在我的弹簧安全配置中发现了这条线

  
删除这个问题解决了这个问题,它可以有效地禁用所有弹簧安全过滤器! 非常感谢您的帮助:) – 2010-09-24 08:58:04

0

@axtavt谢谢你的评论。这条线索帮助解决我的问题,检查我的保安过滤器是如何配置的,我发现在我的春季安全配置

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

该行有效地禁止所有的春季安全过滤器这一行,则删除此解决了这一问题。

您的帮助:)