在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. 一些常见的CFD基本概念(飞机为例)(摘抄)

    分享一些常见的,常用的但不容易掌握的CFD基础概念. 1.理想气体:不考虑流体粘性的影响. 2.不可压缩流体/恒密度:不考虑流体密度的变化.

  2. 对adapter的封装优化

    一般不优化的adapter通常继承自BaseAdapter会出现一下几个问题: getCount(), getItem(), getItemId()代码都要去重写,一个adapter还行,如果adap ...

  3. iOS开发自定义流水布局

    //集成UICollectionViewFlowLayout 自己写的布局 //  SJBFlowLayout.m //  自定义流水布局 // //  Created by zyyt on 16/7 ...

  4. 2016 SyScan360 国际前瞻信息安全会议 多角度探讨信息安全

    SyScan360国际前瞻信息安全会议由与中国第一大互联网安全公司-360公司与SyScan前瞻信息安全技术年会(TheSymposiumonSecurityforAsiaNetwork,以下简称Sy ...

  5. PAT 团体程序设计天梯赛-练习集 L1-023. 输出GPLT

    给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按“GPLTGPLT....”这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的,若某 ...

  6. POJ 2348 Euclid's Game(简单博弈)

    这道题没说a b最大多少,所以要声明为long long型,不然会WA! 道理很简单,(默认a>=b)a和b只有以下三种关系: 1.a%b==0 :这种关系下,可能是a/b为整数,也可能是a和b ...

  7. webpack - tree shaking

    Tree-shaking with webpack 2 and Babel 6 babel-webpack-tree-shaking Ben Levwis

  8. html5 让IE6,7支持HTML5语义化标签的文件

    https://github.com/aFarkas/html5shiv/blob/master/src/html5shiv.js   只要应用这个js就行了

  9. Html加载swf 兼容IE8 (含以下)显示

    嵌入参数说明: 1,AllowScriptAccess  参数: sameDomain:仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问.这是 AVM2 内容的默认值----播放网络视频, ...

  10. k近邻算法

    k 近邻算法是一种基本分类与回归方法.我现在只是想讨论分类问题中的k近邻法.k近邻算法的输入为实例的特征向量,对应于特征空间的点,输出的为实例的类别.k邻近法假设给定一个训练数据集,其中实例类别已定. ...