欢迎使用CSDN-markdown编辑器

原创 2016年08月30日 11:45:14

shiro session 与 ajax的故事

当shiro设置的全局session过期时间将session变为过期的时候,由于shiro需要对每一次请求都进行权限校验,这时候的ajax请求会在过滤器中被拦截。

shiro拦截器配置:

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager"/>
    <property name="filters">
        <map>
            <entry key="authc">
                <bean class="com.interceptors.shiro.RoleAuthorizationFilter" />
            </entry>
        </map>
    </property>
    <property name="filterChainDefinitions">
        <value>
            /static/**                  = anon
            /testControl.do             = anon
            /**                         = authc
        </value>
    </property>
 </bean>

具体解决方案:

配置一个过滤器,用于校验权限,然后在ajax中,使用全局ajax默认设置,对ajax的error结果进行处理。

过滤器配置

public class RoleAuthorizationFilter extends PassThruAuthenticationFilter {
    @Override
    protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {

        HttpServletRequest httpRequest = (HttpServletRequest)request;
        HttpServletResponse httpResponse = (HttpServletResponse)response;

        Subject subject = getSubject(httpRequest, httpResponse);
        if(subject.isAuthenticated()) {
            return super.onAccessDenied(request, response);
        } else {
            /** 判断请求是否为ajax */
            /** 如果是的话,将未认证权限的ajax请求退回,并返回status状态码为401,表示用户没有权限进行该ajax请求 */
            /** 如果不是ajax请求,就将该次操作交由父类(PassThruAuthenticationFilter)处理 */
            if(isAjaxRequest(httpRequest)) {
                WebUtils.toHttp(httpResponse).sendError(401);
                return false;
            } else {
                return super.onAccessDenied(request, response);
            }
        }
    }

    private Boolean isAjaxRequest(HttpServletRequest httpRequest) {
        /** 判断头部是否包含X-Requested-With来确定是否为ajax请求 */
        if(StringUtils.equalsIgnoreCase("XMLHttpRequest", httpRequest.getHeader("X-Requested-With"))){
            return true;
        }
        return false;
    }
}

ajax配置

// 设置jQuery Ajax全局的参数  
$.ajaxSetup({
    async: true,
    cache: false,
    type: "POST",
    contentType: 'application/x-www-form-urlencoded;charset=utf-8',
    error: function(jqXHR, textStatus, errorThrown){
        switch (jqXHR.status){  
            case(500):  
                console.log(jqXHR);
                layer.alert("服务器系统内部错误",{skin:'layer-ext-seaning',icon: 11});  
                break;  
            case(401):  
                layer.alert("未登录或者登录超时",{skin:'layer-ext-seaning',icon: 11}, function() {
                    window.location.href='loginControl.do?login';
                });
                break;  
            case(403):  
                layer.alert("无权限执行此操作",{skin:'layer-ext-seaning',icon: 11});  
                break;
            case(404):  
                layer.alert("找不到页面",{skin:'layer-ext-seaning',icon: 11});
                break;
            case(408):  
                layer.alert("请求超时",{skin:'layer-ext-seaning',icon: 11});  
                break;
            default:  
                layer.alert("未知错误",{skin:'layer-ext-seaning',icon: 11});  
        }  
    }
});
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

欢迎使用CSDN-markdown编辑器

c++ 标准一、2011年 c++ 11(那时刚上大学的孩子都学的不是这个标准 谭浩强编著??) 2014 c++ 14 c++ 17(正在进行时) 二、支持c++ 标准的编译器 在线g...

欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

欢迎使用CSDN-markdown编辑器

# 纯CSS写三角形-border法 (1)有边框的三角形我们来写下带边框的三角形。![这里写图片描述](http://img.blog.csdn.net/20160623141613196)如果是一...

欢迎使用CSDN-markdown编辑器

# 欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链...

欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...

欢迎使用CSDN-markdown编辑器

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)