我希望你能帮我一臂之力:
我正在使用spring security和spring MVC来构建一个Web应用程序,一旦尝试访问禁用资源(403 HTTP状态代码),我需要将流重定向到登录页面。
现在,Spring Security已经开始着手防止未经授权访问我在Restful API(@RestController)中公开的每个资源,并使用正确的403默认页面进行响应。但是当我需要重定向到登录页面时,我需要推动Spring安全性来进行重定向而不是发送403.在这方面我一直试图做以下但我还没有能够使其有效:
设置HttpSecurity bean以在访问被拒绝的页面时管理异常:
@覆盖 protected void configure(HttpSecurity http)抛出Exception { http.csrf()禁用()exceptionHandling()accessDeniedPage(" /安全/ 403&#34)。。。; }
现在,我将控制器设置为catch / security / 403 URL
//用于403访问被拒绝页面 @RequestMapping(value =" / security / 403",method = RequestMethod.GET) public void accesssDenied(){ //在这里做东西,重定向或其他什么。 }
感谢
答案 0 :(得分:2)
创建一个充当拦截器的新类。
此类将实现 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处理执行流程的最常见范例之一。