欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于自定义过滤器获取不到session问题

程序员文章站 2022-06-17 14:40:27
目录自定义过滤器获取不到session问题原因解决办法登录拦截器取到的session为空写了一个拦截器判断有没有登录在另外页面能得到session的值自定义过滤器获取不到session根本原因,多个自...

自定义过滤器获取不到session

根本原因,多个自定义过滤器执行顺序问题

问题

action请求中request对象为shirohttpservletrequest, 可以取到session内容    

而在第一个自定义过滤器中request对象为requestfacade,取不到session内容

原因

session由shiro管理,凡是在shiro过滤器顺序之前的自定义过滤器都取不到session内容

解决办法

将shiro过滤器放在第一个位置

关于自定义过滤器获取不到session问题

关于自定义过滤器获取不到session问题

登录拦截器取到的session为空

写了一个拦截器

@configuration
public class interceptorconfig implements webmvcconfigurer {
    /**
     * 注册拦截器
     */
    @override
    public void addinterceptors(interceptorregistry registry) {
        registry.addinterceptor(new myinterceptor()).addpathpatterns("/**.html").excludepathpatterns("/ylogin.html","/yindex.html","/yregister.html");
    }
}

判断有没有登录

然后那时候我这边session.getattribute(“user”)一直为空

public class myinterceptor implements handlerinterceptor {
    //在请求处理之前进行调用(controller方法调用之前
    @override
    public boolean prehandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o) throws exception {
        system.out.println("开始请求地址拦截");
        //获取session
        httpsession session = httpservletrequest.getsession();
        if (session.getattribute("user") != null)
            return true;
        httpservletresponse.sendredirect("/ylogin.html");
            return false;
    }
    //请求处理之后进行调用,但是在视图被渲染之前(controller方法调用之后)
    @override
    public void posthandle(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, modelandview modelandview) throws exception {
        system.out.println("posthandle被调用");
    }
    //在整个请求结束之后被调用,也就是在dispatcherservlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
    @override
    public void aftercompletion(httpservletrequest httpservletrequest, httpservletresponse httpservletresponse, object o, exception e) throws exception {
        system.out.println("aftercompletion被调用");
    }
}

在另外页面能得到session的值

但是在拦截器那里就session为null,烦了很久,以为是自己写错了拦截器,搞了很久最后才知道,是login.js写错了。就是ajax的url写错了

$.ajax({
            type: "post",
            url: "/user/dologin",
            datatype: "json",
            data:user,
            async:false,
            success: function(res) {}
            })

因为我以前地址写的是url:“http://127.0.0.1:8080/user/dologin”,把前面的ip地址省略就行了,ip地址和localhost的区别

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。