在Spring默认的AccessDeniedHandler中只有对页面请求的处理,而没有对Ajax的处理。而在项目开发是Ajax又是我们要常用的技术,所以我们可以通过自定义AccessDeniedHandler来处理Ajax请求。我们在Spring默认的AccessDeniedHandlerImpl上稍作修改就可以了。

  1. public class DefaultAccessDeniedHandler implements AccessDeniedHandler {
  2. /* (non-Javadoc)
  3. * @see org.springframework.security.web.access.AccessDeniedHandler#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.access.AccessDeniedException)
  4. */
  5. private String errorPage;
  6. //~ Methods ========================================================================================================
  7. public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException)
  8. throws IOException, ServletException {
  9. boolean isAjax = ControllerTools.isAjaxRequest(request);
  10. if(isAjax){
  11. Message msg = MessageManager.exception(accessDeniedException);
  12. ControllerTools.print(response, msg);
  13. }else if (!response.isCommitted()) {
  14. if (errorPage != null) {
  15. // Put exception into request scope (perhaps of use to a view)
  16. request.setAttribute(WebAttributes.ACCESS_DENIED_403, accessDeniedException);
  17. // Set the 403 status code.
  18. response.setStatus(HttpServletResponse.SC_FORBIDDEN);
  19. // forward to error page.
  20. RequestDispatcher dispatcher = request.getRequestDispatcher(errorPage);
  21. dispatcher.forward(request, response);
  22. } else {
  23. response.sendError(HttpServletResponse.SC_FORBIDDEN, accessDeniedException.getMessage());
  24. }
  25. }
  26. }
  27. /**
  28. * The error page to use. Must begin with a "/" and is interpreted relative to the current context root.
  29. *
  30. * @param errorPage the dispatcher path to display
  31. *
  32. * @throws IllegalArgumentException if the argument doesn't comply with the above limitations
  33. */
  34. public void setErrorPage(String errorPage) {
  35. if ((errorPage != null) && !errorPage.startsWith("/")) {
  36. throw new IllegalArgumentException("errorPage must begin with '/'");
  37. }
  38. this.errorPage = errorPage;
  39. }
  40. }

这里我们直接将异常信息通过PrintWriter输出到前台,然后在前台做统一的处理就可以了。在前台对后台消息统一处理的方法可以参考我的这篇文章http://blog.csdn.net/jaune161/article/details/18135607

最后在配置文件中配置下

  1. <sec:http auto-config="true" access-decision-manager-ref="accessDecisionManager">
  2. <sec:access-denied-handler ref="accessDeniedHandler"/>
  3. <sec:session-management invalid-session-url="/login.jsp" />
  4. <sec:intercept-url pattern="/app.jsp" access="AUTH_LOGIN"/>
  5. <sec:intercept-url pattern="/**" access="AUTH_GG_FBGBGG"/>
  6. <sec:form-login login-page="/login.jsp" authentication-failure-url="/login.jsp"
  7. default-target-url="/index.jsp"/>
  8. </sec:http>
  9. <!-- 自定义权限不足处理程序 -->
  10. <bean id="accessDeniedHandler" class="com.zrhis.system.security.RequestAccessDeniedHandler">
  11. <property name="errorPage" value="/WEB-INF/error/403.jsp"></property>
  12. </bean>

自定义AccessDeniedHandler的更多相关文章

  1. OAuth2.0实战:认证、资源服务异常自定义!

    大家好,我是不才陈某~ 这是<Spring Security 进阶>的第4篇文章,往期文章如下: 实战!Spring Boot Security+JWT前后端分离架构登录认证! 妹子始终没 ...

  2. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...

  3. SpringBoot捕获AccessDeniedException

    https://www.jianshu.com/p/bb14cca5ab3d 自定义AccessDeniedHandler /** * @Author: jialing xu * @Descripti ...

  4. 【JavaEE】SSH+Spring Security自定义Security的部分处理策略

    本文建立在 SSH与Spring Security整合 一文的基础上,从这篇文章的example上做修改,或者从 配置了AOP 的example上做修改皆可.这里主要补充我在实际使用Spring Se ...

  5. Spring Security 入门(1-6-2)Spring Security - 内置的filter顺序、自定义filter、http元素和对应的filterChain

    Spring Security 的底层是通过一系列的 Filter 来管理的,每个 Filter 都有其自身的功能,而且各个 Filter 在功能上还有关联关系,所以它们的顺序也是非常重要的. 1.S ...

  6. Spring Security Oauth2 自定义 OAuth2 Exception

    付出就要得到回报,这种想法是错的. 前言 在使用Spring Security Oauth2登录和鉴权失败时,默认返回的异常信息如下 { "error": "unauth ...

  7. springboot+security整合(2)自定义校验

    说明 springboot 版本 2.0.3源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+se ...

  8. springboot2.0整合springsecurity前后端分离进行自定义权限控制

    在阅读本文之前可以先看看springsecurity的基本执行流程,下面我展示一些核心配置文件,后面给出完整的整合代码到git上面,有兴趣的小伙伴可以下载进行研究 使用maven工程构建项目,首先需要 ...

  9. Spring Security学习笔记-自定义Spring Security过滤链

    Spring Security使用一系列过滤器处理用户请求,下面是spring-security.xml配置文件. <?xml version="1.0" encoding= ...

随机推荐

  1. C#使用LitJson解析JSON(转)

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript(Standard ECMA-262 3rd Edition - Decembe ...

  2. openstack私有云布署实践【1 网络拓扑说明】

      图1说明:办公网的openstack使用2台交换机,10.40.40.2是24口  10.40.40.6是48口,管理网段接10.40.40.2VLAN1002     虚拟机的public网段接 ...

  3. POJ 3740 Easy Finding

    #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...

  4. transform translate transition 的区别

    transform是变形,下面有translate transform: rotate旋转/scale缩放/skew扭曲/translate移动/matrix矩阵变形transform连写:rotat ...

  5. 《JS权威指南学习总结--8.8.4 记忆函数》

    内容要点:   可以将上次的计算结果缓存起来.在函数式编程当中,这中缓存技巧叫做 "记忆". 需要注意的是,记忆只是一种编程技巧,本质上是牺牲算法的空间复杂度以换取更优的时间复杂度 ...

  6. powder designer 转数据库

    1.打开“file new model”

  7. 【解题报告】瑞士轮(NOIP2011普及组T3)

    [题外话:这道题吧……说实话我不太喜欢……因为卡快排.] 题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时 ...

  8. deb

    1.APT方式 (1)普通安装:apt-get install softname1 softname2 …; (2)修复安装:apt-get -f install softname1 softname ...

  9. HDU 1242 Rescue(BFS),ZOJ 1649

    题目链接 ZOJ链接 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The ...

  10. linux上发布网站遇到的问题

    在linux上部署mono之后,就自己使用vs写了个简单的网站上传到linux下的apache目录下的htdocs下,就使用主机的浏览器访问地址,但是很残酷的报错了!百思不得其解.搞了半天才想到是因为 ...