请帮助我处理以下项目:
下面提供了代码段:
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();
}
}
预先感谢
答案 0 :(得分:0)
您可以将阀门视为过滤器的等效物,但可以认为是服务器端,而不是应用程序端。例如。您需要将阀门部署到服务器,并且通常无法在不重新启动服务器的情况下热部署它的新版本。您可以通过重新部署包含过滤器的应用程序来重新部署过滤器。
Valve和Filter都是顺序敏感的:当您使用Valves(tomcat使用它们进行服务器端身份验证)并且您确定用户已通过身份验证,但您没有获得主体时,您的Valve似乎是在tomcat的验证阀之前运行。您可以确保按正确的顺序配置阀门,或将实现转移到过滤器,因为过滤器总是在所有阀门运行后 运行。
原则上,它们非常相似。过滤器是由servlet规范定义的,而Valves(属于服务器实现的一部分)是由Tomcat定义的。