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

作者:MrBlackWhite 时间:2022-05-16 11:30:21 

自定义过滤器获取不到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的区别

来源:https://blog.csdn.net/u011665991/article/details/80775508

标签:自定义,过滤器,session
0
投稿

猜你喜欢

  • WPF实现3D翻牌式倒计时特效

    2021-11-11 16:08:21
  • 代码分析Android实现侧滑菜单

    2022-04-02 16:38:45
  • Android 6.0调用相机图册崩溃的完美解决方案

    2022-10-13 02:00:39
  • unity AudioSource播放完声音后要执行的函数或条件操作

    2021-07-04 21:46:37
  • 辨析Java中的String与StringBuffer及StringBuilder字符串类

    2023-08-21 19:59:50
  • Android之禁止ViewPager滑动实现实例

    2022-03-17 23:55:40
  • C#中常用的正则表达式

    2023-10-15 21:10:42
  • Java编程泛型限定代码分享

    2023-11-09 17:46:32
  • Java编程调用微信接口实现图文信息推送功能

    2023-11-25 07:20:47
  • java网络编程基础知识介绍

    2023-01-10 20:37:44
  • C#的String和StringBuilder详解

    2022-06-21 09:51:31
  • spring mvc利用ajax向controller传递对象的方法示例

    2022-10-22 15:06:13
  • Springboot微服务打包Docker镜像流程解析

    2022-02-23 19:39:00
  • Java并发内存模型详情

    2023-06-04 23:50:23
  • 完美实现ExpandableListView二级分栏效果

    2021-07-18 20:04:13
  • Android 通过productFlavors实现多渠道打包方法示例

    2022-08-27 16:04:35
  • C#实现控制电脑注销,关机和重启

    2021-10-28 14:21:15
  • Java 散列存储详解及简单示例

    2022-06-30 23:19:52
  • c# socket网络编程接收发送数据示例代码

    2021-08-31 06:14:13
  • 4种Android屏幕自适应解决方案

    2022-09-09 07:28:42
  • asp之家 软件编程 m.aspxhome.com