我在 tomcat 中定义了一个验证器阀门,所以我有一个不受保护的 servlet(不受安全约束)将预处理这些请求并将其转发到受保护的 servlet。转发将包含必要的参数来验证由 Valve 定义的用户。将请求从一个 servlet 转发到另一个 servlet 会经过阀门吗?
提前致谢,我是开发新手,如果我指定了任何错误的术语,我很抱歉:)
还有tomcat怎么知道这个valve是为认证定义的?
答案 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
中执行这些检查。