我在 tomcat 中定义了一个身份验证器阀,所以我有一个不受保护的 servlet(不受安全约束)将预处理这些请求并将其转发给受保护的 servlet。转发将包含验证 Valve 定义的用户的必要参数。将请求从一个 servlet 转发到另一个将通过阀门吗?
在此先感谢,如果我指定错误的任何术语,我是开发新手,非常抱歉:)
另外,tomcat 是如何知道这个阀门是为身份验证而定义的?
我在 tomcat 中定义了一个身份验证器阀,所以我有一个不受保护的 servlet(不受安全约束)将预处理这些请求并将其转发给受保护的 servlet。转发将包含验证 Valve 定义的用户的必要参数。将请求从一个 servlet 转发到另一个将通过阀门吗?
在此先感谢,如果我指定错误的任何术语,我是开发新手,非常抱歉:)
另外,tomcat 是如何知道这个阀门是为身份验证而定义的?
不,所有Valve
s 在原始请求期间只处理一次。
如果您使用其中一种方法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
.