【问题标题】:Access Denied Spring Security with javaconfig使用 javaconfig 拒绝访问 Spring Security
【发布时间】:2015-08-07 10:32:06
【问题描述】:

希望您能帮我解决以下问题:

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

现在,spring Security 已经完成了防止未经授权访问我在我的 Restful API (@RestController) 中公开的每个资源的工作,并使用正确的 403 默认页面进行响应。但是由于我需要重定向到登录页面,所以我需要推动 spring security 进行重定向而不是发送 403。在这方面,我一直在尝试执行以下操作,但我无法使其工作:

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

    @覆盖 受保护的无效配置(HttpSecurity http)抛出异常{ http.csrf().disable().exceptionHandling().accessDeniedPage("/security/403"); }

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

    //对于403访问被拒绝页面 @RequestMapping(value = "/security/403", method = RequestMethod.GET) 公共无效访问拒绝(){ //在这里做一些事情,重定向或其他。 }

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    该类将实现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() 方法检查客户端是否正在尝试访问禁止的资源,如果是,则将客户端重定向到登录页面。事实上,这是使用拦截器处理执行流程的最常见范例之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 2015-09-15
      • 2015-11-13
      • 2016-09-29
      • 2020-12-19
      • 2014-09-25
      • 2013-10-31
      • 2020-01-25
      相关资源
      最近更新 更多