request.getRemoteUser() 有时返回 null

发布于 2024-12-01 14:26:22 字数 378 浏览 0 评论 0原文

我有一个使用 struts2 与旧式 servlet 结合的 java-web-应用程序。 使用 Acegi 安全性。

在我的 servlet 中,我记录用户正在尝试执行的操作以及该用户是谁。要获取用户,我使用 request.getRemoteUser()

但令我惊讶的是,结果并不一致。大多数情况下,getRemoteUser() 返回正确的用户名,但每隔一段时间我就会得到一个空值。

这背后的原因可能是什么?

编辑: 根据您的反馈,我发现 servlet-url 根本不受安全保护。因此这可能会导致 getRemoteUser() 为空。我现在将为这些实施安全性,并在发回结果之前进行更多测试。

I have a java-web-application using struts2 combined with old-style servlets.
Using Acegi security.

In my servlets, I'm logging what the user is trying to do and which user it is. To get the user im using request.getRemoteUser()

But to my big supprise, the result is not consistent. Most of the times the getRemoteUser() returns the correct username, but every once in a while i get a null-value.

What could be the reason behind this?

EDIT:
After your feedback i have figured out that the servlet-urls are not covered by security at all. So that could cause getRemoteUser()to be null. I will now implement security for these and do some more testing before i post back the results.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

漫雪独思 2024-12-08 14:26:22

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

您使用哪种身份验证(带有基本/摘要的 Jaas 等)?

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

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

getRemoteUser() will return the user logged in else it will return null.

What kind of authentication are you using (Jaas with basic/digest, etc)?

Do you see this error for a particular URLs (servlets)? In that case that URL may have other security constraints.

Another reason would be the client (browser) is not sending the user name with the request. That can happen if you are outside the URL tree that asked for the authentication.

墨小墨 2024-12-08 14:26:22

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

如果是,则通过以下方式获取登录用户名

SecurityContextHolder.getContext().getAuthentication().getName();

Did login form filter by Acegi Security (loginFormUrl of AuthenticationProcessingFilterEntryPoint) ?

If yes, get the logged in username by

SecurityContextHolder.getContext().getAuthentication().getName();
旧伤还要旧人安 2024-12-08 14:26:22

doc 说为什么你会变成空:

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

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

The doc says why you're getting null:

Returns the login of the user making this request, if the user has been authenticated, or null if the user has not been authenticated. Whether the user name is sent with each subsequent request depends on the browser and type of authentication. Same as the value of the CGI variable REMOTE_USER.

You need to investigate the browser that's causing the problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文