gpt4 book ai didi

java - 使用自定义身份验证过滤器时使用 getRemoteUser() 访问用户名

转载 作者:行者123 更新时间:2023-11-30 09:32:52 24 4
gpt4 key购买 nike

简短版本:当我使用自定义身份验证过滤器时,如何让 HttpServletRequest.getRemoteUser() 返回用户名?

长版:

我正在修改当前使用声明性安全性(web.xml 和 tomcat-users.xml)的 Tomcat 应用程序,以改为使用自定义(由我编写)身份验证过滤器(派生自 javax.servlet.Filter)。有很多关于如何执行此操作的信息,而且看起来非常简单。

但是,现有应用程序调用 HttpServletRequest.getRemoteUser(),我假设除非我在过滤器中设置此属性,否则它将返回 null。我找不到有关如何在过滤器中填充 getRemoteUser() 属性的任何信息(没有 setRemoteUser())。我找到了一个 post out there建议将请求对象包装在过滤器中。如果必须的话,我会这样做,但我希望有一种侵入性较小的方法来实现这一点。

有人能帮忙吗?

最佳答案

是的,修改 HttpServletRequestHttpServletResponse 的唯一方法是装饰它并通过覆盖它们来为感兴趣的方法提供您自己的实现。这是带有身份验证过滤器的标准模式,这就是 HttpServletRequestWrapper 的目的(对应的响应是 HttpServletResponseWrapper)。我们这样做是为了包装一个 kerberized 请求,如下所示

public class KerbHttpServletRequest extends HttpServletRequestWrapper
{
private Principal myPrincipal;
private String myAuthType;

public KerbHttpServletRequest(HttpServletRequest aRequest,
Principal aPrincipal,
String aAuthType)
{
super(aRequest);
myPrincipal = aPrincipal;
myAuthType = aAuthType;
}

/**
* This method returns the Remote User name as user\@domain.com.
*/
@Override
public String getRemoteUser()
{
return myPrincipal.getName();
}

@Override
public String getAuthType()
{
return myAuthType;
}

@Override
public Principal getUserPrincipal()
{
return myPrincipal;
}
}

关于java - 使用自定义身份验证过滤器时使用 getRemoteUser() 访问用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12446257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com