使用 javaconfig 拒绝访问 Spring Security

Posted

技术标签:

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

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

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

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

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

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

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

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

谢谢

【问题讨论】:

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

【讨论】:

以上是关于使用 javaconfig 拒绝访问 Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

Spring重温--Spring JavaConfig

Spring JavaConfig实例

Spring JavaConfig配置

使用 oauth2 在浏览器中登录后访问 REST 服务,使用 java config 访问 Spring Security

使用 JavaConfig 使用 Spring 应用程序的 HSQLDB 新手

使用JavaConfig方式-Spring 基础学习