使用 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的主要内容,如果未能解决你的问题,请参考以下文章
使用 oauth2 在浏览器中登录后访问 REST 服务,使用 java config 访问 Spring Security