我希望你能帮我一臂之力:
我正在使用 spring security 和 spring MVC 来构建一个 Web 应用程序,一旦尝试访问禁用资源(403 HTTP 状态代码),我需要将流重定向到登录页面。
现在,Spring Security 已经开始着手防止未经授权访问我在 Restful API(@RestController)中公开的每个资源,并使用正确的 403 默认页面进行响应。但是当我需要重定向到登录页面时,我需要推送 spring 安全性来进行重定向而不是发送 403.在这方面我一直在尝试执行以下操作但是我无法使其工作:
- 设置 HttpSecurity bean 以在访问被拒绝的页面时管理异常:
_1_protected void configure(HttpSecurity http)抛出异常{http.csrf().disable().exceptionHandling().accessDeniedPage(“/security/403”); }
- 现在,我将控制器设置为捕获/security/403 URL
// for 403 access denied page @RequestMapping(value =“/security/403”,method = RequestMethod.GET)public void accesssDenied() {//Do stuff here,重定向等等。 }
谢谢
1 回答
创建一个充当Interceptor的新类。
该类将实现HandlerInterceptor接口并覆盖以下方法:
来自文件:
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
- 拦截处理程序的执行(在控制器之前调用)。postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- 在控制器后立即调用afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler)
- 在发送对视图的响应之前调用在您的情况下,使用
preHandle()
方法检查客户端是否正在尝试访问禁用资源,如果是,请将客户端重定向到登录页面。实际上,这是使用 Interceptor 处理执行流程的最常见范例之一。