在应用Spring Security的Web应用中,假定全部采用缺省配置,如果用户已经登录(且未超时过期),但试图访问一个自己没有权限的HTTP资源,此时:
Spring Security
会抛出一个异常AccessDeniedException
;
AccessDecisionManager
的实现类AffirmativeBased
在判断出访问应该被拒绝时抛出该异常;
ExceptionTranslationFilter
过滤器会调用其属性accessDeniedHandler
对象(类型为AccessDeniedHandler
)的方法handle
来处理这种情况;
- 缺省情况下,这里属性对象
accessDeniedHandler
的实现类是AccessDeniedHandlerImpl
;
- 缺省情况下,这里属性对象
accessDeniedHandler.handle
方法会返回HTTP 403 给用户浏览器;
- 并且如果属性
accessDeniedHandler
对象上指定了属性errorPage
(错误页面URL)的话,服务器会同时将浏览器forward
到该错误页面URL(注意这里是forward
而不是redirect
)
- 并且如果属性
这种情况如果开发人员想做定制处理,可以实现自己的AccessDeniedHandler
。