线上点餐平台(过滤器)

        过滤器在拦截请求的时候,会根据申请访问资源的sessionid寻找服务器内存储的对应session,再根据session内的相应字段是否为空来决定是否放行。由于一个浏览器与一个服务器之间只有一个session,是共享的,这个时候如果先后判断后台和移动端的用户是否分别登陆,就会出现其中任意一方登陆,另一方都会被放行的bug

 4.1判断后台登录状态,如果已登录,则直接放行
        /**
         * 这里有一个bug,就是当后台登录以后,如果我们使用同一个浏览器进行移动端登录,那么会直接在这一步骤放行请求
         * 不会再去判断session的user属性是否为空,会导致可以绕过登录,直接访问页面上的任何资源
         * 解决方法①与前端约定,所有的后台访问路径加入一个”/api“,这样可以在判断employee和user属性是否为空后,
         *         再次判断是否是后台或者前台的请求,如果不是则放行
         * 解决方法②使用无状态的token代理有状态的session进行身份校验,例如现在非常流行的jwt令牌
         */
        if (request.getSession().getAttribute("employee") != null){
            log.info("商家已登录,id为{}",request.getSession().getAttribute("employee"));
            BaseContext.setCurrentId((Long) request.getSession().getAttribute("employee"));
//            long id = Thread.currentThread().getId();
//            log.info("当前线程id:{}",id);
            filterChain.doFilter(request,response);//放行
            return;
        }

//        4.2判断移动端登录状态,如果已登录,则直接放行
        if (request.getSession().getAttribute("user") != null){
            log.info("用户已登录,id为{}",request.getSession().getAttribute("user"));
            BaseContext.setCurrentId((Long) request.getSession().getAttribute("user"));
//            long id = Thread.currentThread().getId();
//            log.info("当前线程id:{}",id);
            filterChain.doFilter(request,response);//放行
            return;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值