将请求从一个 servlet 转发到另一个 servlet 是否使其通过定义的阀门?

时间:2021-06-03 17:31:34

标签: authentication tomcat servlets web-applications tomcat-valve

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

提前致谢,我是开发新手,如果我指定了任何错误的术语,我很抱歉:)

还有tomcat怎么知道这个valve是为认证定义的?

1 个答案:

答案 0 :(得分:0)

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

如果您使用 RequestDispatcher 的方法之一将请求传输到另一个 servlet(或 JSP 页面),则仅使用配置的 Filter。假设您的 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 中执行这些检查。

相关问题