首先说一下我的问题:我正在做一个网上商城的案列,现在的情况是这样的,关于用户在没有登录的情况下浏览商品之后提交订单,在提交订单的时候进行判断如果用户已经登录过了就直接把订单保存到数据库,如果没有就提示登录。用户在登录完成的时候存一个用户session,控制层获得session,可是在没有登录的时候就没有那个session,在订单处理控制层自然就获取不到,我应该怎么办才可行,提供一个解决方案就行了,谢谢。说了很多,不知道各位有没有懂我的意思
2条回答 默认 最新
关注
首先,每个请求到后台都会抽象为一个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); } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报