authentication - 将请求从一个 servlet 转发到另一个是否使其通过定义的阀门?
问题描述
我在 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
.
推荐阅读
- dataframe - 使用 pandas styler 将逐行彩色数据框导出到 excel
- python - 更新 Azure 核心工具后 Python Azure 函数因 AttributeError('__enter__') 失败
- authentication - 我可以从 Blazor 客户端中的 AuthenticationStateProvider 访问我的 ID 令牌吗?
- reactjs - 为什么我会在此组件中获得额外的重新渲染?
- laravel - 如何在 Laravel 中 date_of_birth 的视图刀片上显示 Unknown
- python - 如何从具有多个文件的目录中仅拆分每个 pdf 文件的第一页?
- r - 使用 ggplot 绘制闪亮的反应数据
- c - 将指针的地址而不是指针作为函数参数传递
- sql-server - 在 Order By 子句中调用存储过程
- python - 在 Python Tkinter 中单击要显示为复选框的文本