使用javaconfig访问拒绝Spring Security

时间:2015-05-25 22:36:44

标签: spring spring-security http-status-code-403

我希望你能帮我一臂之力:

我正在使用spring security和spring MVC来构建一个Web应用程序,一旦尝试访问禁用资源(403 HTTP状态代码),我需要将流重定向到登录页面。

现在,Spring Security已经开始着手防止未经授权访问我在Restful API(@RestController)中公开的每个资源,并使用正确的403默认页面进行响应。但是当我需要重定向到登录页面时,我需要推动Spring安全性来进行重定向而不是发送403.在这方面我一直试图做以下但我还没有能够使其有效:

  1. 设置HttpSecurity bean以在访问被拒绝的页面时管理异常:

    @覆盖 protected void configure(HttpSecurity http)抛出Exception {     http.csrf()禁用()exceptionHandling()accessDeniedPage(" /安全/ 403&#34)。。。; }

  2. 现在,我将控制器设置为catch / security / 403 URL

    //用于403访问被拒绝页面 @RequestMapping(value =" / security / 403",method = RequestMethod.GET) public void accesssDenied(){     //在这里做东西,重定向或其他什么。 }

  3. 感谢

1 个答案:

答案 0 :(得分:2)

创建一个充当拦截器的新类。

此类将实现 HandlerInterceptor 接口并覆盖以下方法:

来自documentation

  • 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处理执行流程的最常见范例之一。