温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

自定义过滤器获取不到session问题怎么解决

发布时间:2022-01-14 13:44:33 来源:亿速云 阅读:411 作者:柒染 栏目:开发技术

今天给大家介绍一下自定义过滤器获取不到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的区别

以上就是自定义过滤器获取不到session问题怎么解决的全部内容了,更多与自定义过滤器获取不到session问题怎么解决相关的内容可以搜索亿速云之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下亿速云!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI