spring security3.x学习(24)_拒绝访问异常处理(AccessDeniedException)

咱们看一下spring security是如何处理AccessDeniedException的。
因为缺少GrantedAuthority或其它需要的权限被拒绝的时候,他们看到的是servlet容器的默认HTTP 403(访问拒绝)页面。这 个 页 面 是 o.s.s.web.access.AccessDeniedHandler 默 认 行 为 的 结 果 , 它 被ExceptionTranslationFilter所触发以响应框架抛出的一个AccessDeniedException异常。
我看了书中的例子,书中的例子导入后,会报错的,所以我自己写了一个。
首先在http标签下配置一个AccessDenied指向路径:

[html]  view plain copy
  1. <span style="font-size:10px"><!-- 拒绝请求的处理 -->  
  2. <access-denied-handler error-page="/accessDenied.html"/></span>  

然后配置controller:
[html]  view plain copy
  1. <span style="font-size:10px">@Controller  
  2. public class ErrorController {  
  3.   
  4. @RequestMapping("/accessDenied")  
  5. public String accessDenied(ModelMap mm,HttpServletRequest request){  
  6. Object obj = request.getAttribute("SPRING_SECURITY_403_EXCEPTION");  
  7. if(null != obj){  
  8. AccessDeniedException adx = (AccessDeniedException)obj;  
  9. mm.put("errorDetails", adx.getMessage());  
  10. }  
  11. return "error/403";  
  12. }  
  13. }  
  14. </span>  

我说的报错就是这里,我们通过request.getAttribute("SPRING_SECURITY_403_EXCEPTION");可以获取AccessDeniedException对象,从而拿到错误信息了。那我是怎么知道这个常量的名字叫做"SPRING_SECURITY_403_EXCEPTION"呢?
看一下源码就知道了:

源码中存放了AccessDeniedException对象,我们可以获取他,在我们自己的Controller中。最后我们要完成我们自己的jsp页面。
只有一句话(EL表达式):错误信息:${errorDetails}


我们在研究一下什么会触发这类异常呢,看一下下边的表:

这样我们就知道了,其实AccessDeniedException是在没有权限时,被拒绝访问了。我想  大概就是403错误码吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值