gpt4 book ai didi

java - 如何访问tomcat自定义阀中的用户主体

转载 作者:行者123 更新时间:2023-11-28 23:14:28 24 4
gpt4 key购买 nike

请帮我解决以下问题:

  1. 究竟在什么地方使用了定制阀门而不是过滤器?
  2. 在我们的应用程序中,我创建了 tomcat 9 自定义阀并尝试从该阀访问用户主体。但在阀门中,它返回空值。但我们可以从过滤器访问。我们使用了基于表单的身份验证。
  3. User Principal 将在 Custom valve 中可用,还是在 fliter 中可用?

代码片段如下:

public class ContextInitializerValve extends ValveBase {



public ContextInitializerValve() {
System.out.println("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^");
}

@Override
public void invoke(Request request, Response response) throws IOException, ServletException {


System.out.println("======================custom valve==============================");
Principal principal = request.getUserPrincipal();
}
}

提前致谢

最佳答案

您可以将阀门视为过滤器的等价物,但在服务器端,而不是在应用程序端。例如。你会部署一个阀门到服务器,并且通常不能在不重新启动服务器的情况下热部署它的新版本。您可以通过重新部署包含过滤器的应用程序来重新部署过滤器。

Valves 和 Filters 都是顺序敏感的:当你使用 Valves(tomcat 将它们用于服务器端身份验证)并且你确定用户已通过身份验证,但你没有获得委托(delegate)人时,你的 valve 似乎是在 tomcat 的身份验证阀之前运行。您可以确保以正确的顺序配置您的阀门,或者将实现移至过滤器,因为过滤器始终所有阀门运行后运行。

原则上,它们非常相似。过滤器由 servlet 规范定义,而阀门(作为服务器实现的一部分)由 Tomcat 定义。

关于java - 如何访问tomcat自定义阀中的用户主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52215671/

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