request.getRemoteUser()有时会返回null

时间:2011-08-26 14:12:56

标签: java servlets struts2 spring-security

我有一个使用struts2和旧式servlet的java-web-application。 使用Acegi安全性。

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

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

这背后的原因是什么?

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

3 个答案:

答案 0 :(得分:3)

getRemoteUser()将返回登录的用户,否则将返回null。

您使用什么样的身份验证(Jaas with basic / digest等)?

您是否看到特定URL(servlet)的此错误?在这种情况下,URL可能具有其他安全约束。

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

答案 1 :(得分:2)

doc说明了为什么你得到null:

  

如果用户已经过身份验证,则返回发出此请求的用户的登录名;如果用户尚未通过身份验证,则返回null。是否随每个后续请求一起发送用户名取决于浏览器和身份验证类型。与CGI变量REMOTE_USER的值相同。

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

答案 2 :(得分:2)

登录表单是否已被Acegi Security( AuthenticationProcessingFilterEntryPoint loginFormUrl)过滤?

如果是,请通过

获取登录的用户名
SecurityContextHolder.getContext().getAuthentication().getName();