猪猪侠- 2017-05-07 13:30 采纳率: 100%
浏览 7420
已采纳

使用ssm框架时关于session的问题

首先说一下我的问题:我正在做一个网上商城的案列,现在的情况是这样的,关于用户在没有登录的情况下浏览商品之后提交订单,在提交订单的时候进行判断如果用户已经登录过了就直接把订单保存到数据库,如果没有就提示登录。用户在登录完成的时候存一个用户session,控制层获得session,可是在没有登录的时候就没有那个session,在订单处理控制层自然就获取不到,我应该怎么办才可行,提供一个解决方案就行了,谢谢。说了很多,不知道各位有没有懂我的意思

  • 写回答

2条回答 默认 最新

  • 毕小宝 博客专家认证 2017-05-07 14:01
    关注

    首先,每个请求到后台都会抽象为一个HttpRequestServlet的实例,这里面就有Session的信息,可以从中判断是否有Session。
    其次,Session判断通常用的是Filter拦截器,判断请求中是否有Session信息。提供一个实现Demo:

      /**
         * (non-Javadoc) 过滤器
    
         * 
         * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse,
         *      javax.servlet.FilterChain)
         */
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
                ServletException {
            if(!IS_SECURITY_FILTER){
                logger.debug("安全过滤器未启用! ");
                chain.doFilter(request, response);
                return;
            }
    
            // 判断是否使用HTTP
            checkRequestResponse(request, response);
            // 转型
            HttpServletRequest httpRequest = (HttpServletRequest) request;
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.setHeader("P3P", "CP=\"CAO PSA OUR\"");
    
            // 取用户访问的URL
            String uri = httpRequest.getRequestURI();
            logger.debug("请求servletPath:"+httpRequest.getRequestURI());
    
            // 登录界面 ,不处理,交给登录模块处理逻辑
            if(isNotFilter(uri)){
                  logger.debug(uri+"的请求为非检查地址,安全过滤允许通过 ");
                  chain.doFilter(request, response);
                  return;
            }
    
            try {
                // 取用户登录后的User
                User rtUser = (User) request.getSession().getAttribute(request.getSession().getId());
                if (rtUser == null) {
                   logger.debug("用户会话已过期或未登录,安全过滤器禁止访问,并跳转到错误页面 ");
                    // 没有登录,返回登录界面
                    httpRequest.getRequestDispatcher(loginUrl).forward(httpRequest, httpResponse);
                    return;
                }
                chain.doFilter(request, response);
            } catch (Exception ex) {
                ex.printStackTrace();
                logger.error("安全过滤器会话检查异常", ex);
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记