2011-08-26 103 views
4

我有一个使用struts2与旧式servlet结合的java-web-application。 使用Acegi安全性。request.getRemoteUser()有时会返回null

在我的servlets中,我正在记录用户正在尝试做什么以及它是哪个用户。为了让用户即时使用request.getRemoteUser()

但是对于我的大供应来说,结果并不一致。大多数时候getRemoteUser()返回正确的用户名,但每隔一段时间我会得到一个空值。

这背后的原因是什么?

编辑: 经过您的反馈,我发现servlet-urls根本没有被安全覆盖。所以这可能导致getRemoteUser()为空。我现在将为这些实现安全性,并在回发结果之前进行更多测试。

+3

根据的JavaDoc“返回用户的登录提出这个要求,如果用户已经通过认证,或NULL,如果用户没有通过验证。用户名是否与每个后续请求一起发送取决于浏览器和验证类型,与CGI变量REMOTE_USER的值相同。“所以它可能是Acegi/Browser没有按预期设置远程用户。 –

回答

2

doc说为什么你要空:

返回用户的提出这个要求的登录,如果用户已经通过认证,或NULL,如果用户没有通过验证。每个后续请求是否与用户名一起发送取决于浏览器和身份验证类型。与CGI变量REMOTE_USER的值相同。

您需要调查导致问题的浏览器。

3

getRemoteUser()将返回用户登录否则它将返回空值。

你正在使用什么样的认证(基本/摘要等Jaas)?

您是否看到特定网址(servlets)的这个错误?在这种情况下,该URL可能有其他安全限制。

另一个原因是客户端(浏览器)没有发送带有请求的用户名。如果您位于要求进行身份验证的URL树之外,则会发生这种情况。

相关问题