【问题标题】:Why is request.getRemoteUser() returning the tomcat windows service account sometimes为什么 request.getRemoteUser() 有时会返回 tomcat windows 服务帐户
【发布时间】:2016-12-03 07:27:37
【问题描述】:

我正在尝试让 Windows 身份验证与使用 GWT 开发的第 3 方应用程序一起工作。 我在 Windows 服务器上使用 tomcat 托管应用程序。我通过 IIS 代理(按照 tomcat 的文档安装)访问该站点。

如果我修改 webapp 的 .jsp 以显示 "" ,我会得到我想要的用户名,我的 windows 帐户。

但是 webapp 使用我在服务器上安装 Tomcat Windows 服务的帐户对我进行身份验证。

在 webapp 的(反编译的)源代码中,我看到对完全相同的 "request.getRemoteUser()" 的调用,所以我想知道哪里有区别。

这里是反编译的类:

import javax.servlet.http.HttpServletRequest;

public class RemoteUserLoginProvider
  extends BaseRequestLoginProvider
{
  public String extractLoginFromRequest(HttpServletRequest request)
  {
    return request.getRemoteUser();
  }
}

还有:

import com.google.inject.Inject;
import com.google.inject.Provider; 
import javax.servlet.http.HttpServletRequest;

public abstract class BaseRequestLoginProvider
  implements Provider<String>
{
  @Inject
  private Provider<HttpServletRequest> requestProvider;

  public abstract String extractLoginFromRequest(HttpServletRequest paramHttpServletRequest);

  public String get()
  {
    HttpServletRequest request = (HttpServletRequest)this.requestProvider.get();
    String userlogin = extractLoginFromRequest(request);

    return userlogin;
  }
}

我的问题是否与谷歌 guice 上的这个错误有关:https://github.com/google/guice/issues/780

如果是这样,有什么解决方法吗?

【问题讨论】:

标签: java tomcat iis gwt windows-authentication


【解决方案1】:

request.getRemoteUser()返回的用户名是在用户名映射到Windows account之前客户端发送的授权头中派生的。如果您的 Web 服务器上安装了将传入用户映射到帐户的身份验证过滤器,请使用 LOGON_USER 查看映射的用户名。

IIS server variables

【讨论】:

【解决方案2】:

HttpServletRequest.getRemoteUser() 通常只返回与 CGI REMOTE_USER 变量相同的值,这是来自 HTTP 基本身份验证的用户名。听起来您希望它是一个不同的值,这意味着正在修改 HttpServletRequest 对象。这很可能是由 Servlet 过滤器完成的。

如果 Guice 错误是罪魁祸首,那么解决方法很容易:只需确保在过滤器验证请求和修改 HttpServletRequest 对象之后安装GuiceFilter p>

作为一般经验法则,我不认为像这样修改请求是一个好主意,正是因为当出现问题时很难调试。相反,如果您有一个 @RequestScoped 提供程序,它从请求中提取了您想要的值并进行了您需要的任何身份验证,那么您可以通过依赖注入来使用用户信息。或者,更一般地说:总是更喜欢创建新的(最好是不可变的)值,而不是改变现有的对象——这使得控制流更容易推理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多