关于自定义过滤器获取不到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
投稿

猜你喜欢

  • Java 实现拦截器Interceptor的拦截功能方式

    2023-04-25 04:35:15
  • Android对话框使用方法详解

    2023-11-09 03:37:51
  • DevExpress实现为TextEdit设置水印文字的方法

    2021-11-11 14:27:32
  • 关于spring boot中几种注入方法的一些个人看法

    2022-09-07 10:15:14
  • Android应用强制更新APP的示例代码

    2022-07-28 09:00:07
  • Android studio 出现错误Run with --stacktrace option to get the stack trace. Run with --info or --debu

    2022-10-25 09:43:15
  • SpringBoot中读取application.properties配置文件的方法

    2023-10-20 17:29:05
  • Java判断所给年份是平年还是闰年

    2023-10-21 17:48:59
  • Java 定时器的多种实现方式

    2021-06-14 03:15:09
  • java中synchronized(同步代码块和同步方法)详解及区别

    2021-09-03 08:44:05
  • SpringBoot实现接口数据的加解密功能

    2023-06-30 00:11:01
  • WebView的几个常见功能使用方法

    2023-01-25 13:54:48
  • C#仪器数据文件解析Excel文件的方法浅析(xls、xlsx)

    2023-09-18 01:40:57
  • 基于Unity3D实现3D照片墙效果

    2023-05-22 00:18:51
  • Android 高德地图之poi搜索功能的实现代码

    2022-03-07 01:36:52
  • Java深入探究Object类的方法

    2022-11-24 06:48:53
  • Java如何使用httpclient检测url状态及链接是否能打开

    2022-07-03 21:23:25
  • 关于SpringMVC在Controller层方法的参数解析详解

    2022-10-29 01:06:10
  • Java结构性设计模式中的装饰器模式介绍使用

    2022-04-08 06:30:00
  • Springboot中登录后关于cookie和session拦截问题的案例分析

    2022-09-25 19:26:44
  • asp之家 软件编程 m.aspxhome.com