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

rks48beu  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(292)

我在tomcat中定义了一个验证器阀,因此我有一个未受保护的servlet(不受安全约束)将预处理这些请求并将其转发给受保护的servlet。转发将包含必要的参数,以验证valve定义的用户。将请求从一个servlet转发到另一个servlet将通过该阀吗?
提前感谢,我是开发新手,如果我指定了任何错误的术语,非常抱歉:)
tomcat如何知道该阀门是为认证而定义的?

b5buobof

b5buobof1#

不,全部 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 .

相关问题