首页 > 解决方案 > 将请求从一个 servlet 转发到另一个是否使其通过定义的阀门?

问题描述

我在 tomcat 中定义了一个身份验证器阀,所以我有一个不受保护的 servlet(不受安全约束)将预处理这些请求并将其转发给受保护的 servlet。转发将包含验证 Valve 定义的用户的必要参数。将请求从一个 servlet 转发到另一个将通过阀门吗?

在此先感谢,如果我指定错误的任何术语,我是开发新手,非常抱歉:)

另外,tomcat 是如何知道这个阀门是为身份验证而定义的?

标签: authenticationtomcatservletsweb-applicationstomcat-valve

解决方案


不,所有Valves 在原始请求期间只处理一次。

如果您使用其中一种方法RequestDispatcher将请求传输到另一个 servlet(或 JSP 页面),则仅使用配置Filter的 s。假定您的 servlet 在转发请求之前执行了必要的安全检查。

要在代码中执行必要的检查,您可以使用以下内容:

// Forces authentication
// If the user was not authenticated, he will need to authenticate
// and resubmit the servlet request.
if (request.authenticate(response)) {
    // Authorization
    if (!request.isUserInRole("admin")) {
        response.sendError(HttpServletResponse.SC_FORBIDDEN);
        return;
    }
    // Otherwise forward
    request.getRequestDispatcher("/protected/resource").forward(request, response);
}

您可以在转发 servlet 或适当的HttpFilter.


推荐阅读