我有一个拦截器,用于检查用户的 ldap 组成员身份,如果认为错误,将重定向到 NoAuthorization 页面,如下所示:
public class MyIntercept implements HandlerInterceptor {
public boolean preHandle (HttpServletRequest request, HttpServletReaponse response, Object handler) {
If ( // check access) {
response.redirect(/NoAuthorisation?reason=Blablabla);
return false;
}
return true
}
}
Run Code Online (Sandbox Code Playgroud)
这可行,但我想以更不那么明显的方式发送原因(不在网址中)
我想我直接调用 NoAuthorization 控制器,但不知道该怎么做。
有什么建议和最佳实践吗?
SpringMVC有一个Flash的概念。这是一种简单地将任意属性传递给重定向请求的方法,具有两个特征:
\n在带注释的控制器中使用它非常简单@RequestMapping,因为您只需将 RedirectAttributes 参数传递给控制器方法,填充它并返回一个redirect:...字符串。
它可以在拦截器中使用,但您必须使用来自 的静态方法明确要求输出闪存映射RequestContextUtils。
public boolean preHandle (HttpServletRequest request, HttpServletReaponse response, Object handler) {\nIf ( // check access) {\n Map<String, Object> flash = RequestContextUtils.getOutputFlashMap(request);\n // populate the flash map with attributes you want to pass to redirected controller\n response.redirect(/NoAuthorisation?reason=Blablabla);\n return false;\n}\nreturn true\n}\n\n}\nRun Code Online (Sandbox Code Playgroud)\nSpring参考手册摘录:
\n\n\nFlash 属性为一个请求提供了一种存储要在另一个请求中使用的属性的方法。这在重定向\xe2\x80\x89\xe2\x80\x94\xe2\x80\x89 时最常需要,例如 Post/Redirect/Get 模式。Flash 属性在重定向之前临时保存(通常在会话中),以便在重定向之后可供请求使用并立即删除。
\n...
\nFlash 属性支持始终处于“打开”状态,不需要显式启用,但如果不使用,它永远不会导致 HTTP 会话创建。每个请求都有一个“输入”FlashMap,其中包含从先前请求(如果有)传递的属性,以及一个“输出”FlashMap,其中包含要为后续请求保存的属性。这两个 FlashMap 实例都可以通过 RequestContextUtils 中的静态方法从 Spring MVC 中的任何位置访问。
\n...重定向后,“输入”FlashMap 中的属性会自动添加到为目标 URL 提供服务的控制器的模型中。
\n
| 归档时间: |
|
| 查看次数: |
4009 次 |
| 最近记录: |