自定义AccessDeniedHandler
在Spring默认的AccessDeniedHandler中只有对页面请求的处理,而没有对Ajax的处理。而在项目开发是Ajax又是我们要常用的技术,所以我们可以通过自定义AccessDeniedHandler来处理Ajax请求。我们在Spring默认的AccessDeniedHandlerImpl上稍作修改就可以了。
- public class DefaultAccessDeniedHandler implements AccessDeniedHandler {
- /* (non-Javadoc)
- * @see org.springframework.security.web.access.AccessDeniedHandler#handle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, org.springframework.security.access.AccessDeniedException)
- */
- private String errorPage;
- //~ Methods ========================================================================================================
- public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException accessDeniedException)
- throws IOException, ServletException {
- boolean isAjax = ControllerTools.isAjaxRequest(request);
- if(isAjax){
- Message msg = MessageManager.exception(accessDeniedException);
- ControllerTools.print(response, msg);
- }else if (!response.isCommitted()) {
- if (errorPage != null) {
- // Put exception into request scope (perhaps of use to a view)
- request.setAttribute(WebAttributes.ACCESS_DENIED_403, accessDeniedException);
- // Set the 403 status code.
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- // forward to error page.
- RequestDispatcher dispatcher = request.getRequestDispatcher(errorPage);
- dispatcher.forward(request, response);
- } else {
- response.sendError(HttpServletResponse.SC_FORBIDDEN, accessDeniedException.getMessage());
- }
- }
- }
- /**
- * The error page to use. Must begin with a "/" and is interpreted relative to the current context root.
- *
- * @param errorPage the dispatcher path to display
- *
- * @throws IllegalArgumentException if the argument doesn't comply with the above limitations
- */
- public void setErrorPage(String errorPage) {
- if ((errorPage != null) && !errorPage.startsWith("/")) {
- throw new IllegalArgumentException("errorPage must begin with '/'");
- }
- this.errorPage = errorPage;
- }
- }
这里我们直接将异常信息通过PrintWriter输出到前台,然后在前台做统一的处理就可以了。在前台对后台消息统一处理的方法可以参考我的这篇文章http://blog.csdn.net/jaune161/article/details/18135607
最后在配置文件中配置下
- <sec:http auto-config="true" access-decision-manager-ref="accessDecisionManager">
- <sec:access-denied-handler ref="accessDeniedHandler"/>
- <sec:session-management invalid-session-url="/login.jsp" />
- <sec:intercept-url pattern="/app.jsp" access="AUTH_LOGIN"/>
- <sec:intercept-url pattern="/**" access="AUTH_GG_FBGBGG"/>
- <sec:form-login login-page="/login.jsp" authentication-failure-url="/login.jsp"
- default-target-url="/index.jsp"/>
- </sec:http>
- <!-- 自定义权限不足处理程序 -->
- <bean id="accessDeniedHandler" class="com.zrhis.system.security.RequestAccessDeniedHandler">
- <property name="errorPage" value="/WEB-INF/error/403.jsp"></property>
- </bean>
自定义AccessDeniedHandler的更多相关文章
- OAuth2.0实战:认证、资源服务异常自定义!
大家好,我是不才陈某~ 这是<Spring Security 进阶>的第4篇文章,往期文章如下: 实战!Spring Boot Security+JWT前后端分离架构登录认证! 妹子始终没 ...
- Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
- SpringBoot捕获AccessDeniedException
https://www.jianshu.com/p/bb14cca5ab3d 自定义AccessDeniedHandler /** * @Author: jialing xu * @Descripti ...
- 【JavaEE】SSH+Spring Security自定义Security的部分处理策略
本文建立在 SSH与Spring Security整合 一文的基础上,从这篇文章的example上做修改,或者从 配置了AOP 的example上做修改皆可.这里主要补充我在实际使用Spring Se ...
- Spring Security 入门(1-6-2)Spring Security - 内置的filter顺序、自定义filter、http元素和对应的filterChain
Spring Security 的底层是通过一系列的 Filter 来管理的,每个 Filter 都有其自身的功能,而且各个 Filter 在功能上还有关联关系,所以它们的顺序也是非常重要的. 1.S ...
- Spring Security Oauth2 自定义 OAuth2 Exception
付出就要得到回报,这种想法是错的. 前言 在使用Spring Security Oauth2登录和鉴权失败时,默认返回的异常信息如下 { "error": "unauth ...
- springboot+security整合(2)自定义校验
说明 springboot 版本 2.0.3源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+se ...
- springboot2.0整合springsecurity前后端分离进行自定义权限控制
在阅读本文之前可以先看看springsecurity的基本执行流程,下面我展示一些核心配置文件,后面给出完整的整合代码到git上面,有兴趣的小伙伴可以下载进行研究 使用maven工程构建项目,首先需要 ...
- Spring Security学习笔记-自定义Spring Security过滤链
Spring Security使用一系列过滤器处理用户请求,下面是spring-security.xml配置文件. <?xml version="1.0" encoding= ...
随机推荐
- hdu 3440 House Man
差分约束系统 例如, 5 6 20 34 54 10 15 这一组测试数据 先编号,分别为1 2 3 4 5 ,然后可以写出一组表达式,两个编号之间的距离必定大于等于1的,所以i+1到i建立有向边 ...
- hdu 3986 Harry Potter and the Final Battle
一个水题WA了60发,数组没开大,这OJ也不提示RE,光提示WA...... 思路:先求出最短路,如果删除的边不是最短路上的,那么对结果没有影响,要有影响,只能删除最短路上的边.所以枚举一下最短路上的 ...
- win10应用UserControl
<Grid xmlns:src="using:UserControlExample" Margin="0,50,0,0"> <Grid.Row ...
- linux centOS 安装oracle
安装环境 Linux服务器:CentOS6.4-64位 oracle服务器:oracle11g-64位 基本要求 内存大小:至少2G 硬盘大小:至少6G 交换空间:一般为内存的2倍,例如:2G的内存可 ...
- jquery 实现 点击一个按钮添加多个div
<script type="text/javascript"> var blockNum=10; $(document).ready(function(){ var p ...
- Haskell 函数式编程
Haskell是纯函数式编程,它强调不函数不改变外部世界状态,即,一个函数的输出只由函数接收的输入决定.那如何与外面沟通呢,比如读取一个文件内容并输出这个文件内容(字符串),显然这种函数非纯函数,因为 ...
- asp.net分页代码(教你怎么实现)
直接上代码: css部分代码 .pageCss { float: right; width: auto; height: 30px; line-height: 30px; margin-right: ...
- web页面开发相关基础
CSS是一种用于web的标准布局语言,可以控制版面.颜色以及元素和图像的大小和位置.HTML文档应该利用外部样式表来定义文档中使用的样式.JavaScript也应该放在外部文档中,这个文档应该只包含J ...
- LeetCode OJ Remove Duplicates from Sorted Array II
Follow up for "Remove Duplicates":What if duplicates are allowed at most twice? For exampl ...
- MySQL-MHA高可用方案
http://files.cnblogs.com/jimingsong/mha-mysql.pdf 此方案为一号店MySQL MHA高可用方案.备注.