taotao创建订单代码中之前忘了加入用户信息,那么加上呢?

分析:用户创建订单的时候,我们会强制要求用户先登录,也就是说,创建订单的Controller执行时,一定是用户已经登录了的,而用户只要登录,就会在用户登录拦截器中查询到用户信息,而我们可以在拦截器中把用户信息放入request对象中,然后在后面的Controller中就可以在request中取到用户信息,再强转成用户对象即可。

用户登录拦截器代码;

package com.taotao.portal.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import com.taotao.common.utils.CookieUtils;
import com.taotao.pojo.TbUser;
import com.taotao.portal.service.impl.UserServiceImpl; public class LoginInterceptor implements HandlerInterceptor { /**
* 注意,因为拦截器属于Controller,而在Controller中是不能使用Value注解来获取配置文件中设置的值的,
* 因为 Value是spring父容器加载的属性,而Controller是springMVC子容器加载的,子容器可以访问父容器中的对象,
* 但是不能访问父容器中的属性
*
* 而我们在这里还需要用到 配置文件 中的 url值,只要用变通的方法
* 1.首先在service的实现类 UserServiceImpl 中用@Value获取到属性,并将其设置成 public类型
* 2.在Controller这里,不注入接口,而是直接注入 UserServiceImpl 实现类
* 这样就可以在Controller中直接使用注入的service实现类的属性了
*/
@Autowired
private UserServiceImpl userService; //在handler执行之前处理
//返回值决定handler是否执行。true:执行, false:不执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//判断用户是否登录
//从cookie中取token
String token = CookieUtils.getCookieValue(request, "TT_TOKEN");
//根据token换取用户信息,调用sso系统的接口
///这里需要写一些业务 逻辑,不要在拦截器中写,单写一个service,只在这里注入并调用
TbUser user = userService.getUserByToken(token);
//如果取不到用户信息
if (user==null) {
//跳转到登录页面,把用户请求的url作为参数传递给登录页面
response.sendRedirect(userService.SSO_BASE_URL+userService.SSO_PAGE_LOGIN
+"?redirect="+request.getRequestURL());
//返回false
return false;
}
//如果取到用户信息,放行
//把用户信息放到request中,以便后面在Controller中使用用户信息
request.setAttribute("user", user); //request中可以直接存对象,只要到了后台都可以直接存对象
return true;
} //在 handler执行之后,返回ModelAndView之前处理
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub } //返回ModelAndView之后处理(响应用户之后,可以用来处理异常)
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub } }

然后在后面的Controller中就可以直接取到了:

Controller代码:

package com.taotao.portal.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import com.taotao.common.pojo.CartItem;
import com.taotao.common.utils.ExceptionUtil;
import com.taotao.pojo.TbUser;
import com.taotao.portal.pojo.Order;
import com.taotao.portal.service.CartService;
import com.taotao.portal.service.OrderService; /**
* 订单
* @author Administrator
* order-cart
*
*/
@Controller
@RequestMapping("/order")
public class OrderController { @Autowired
private CartService cartService; @Autowired
private OrderService orderService; //打开订单结算页面
@RequestMapping("/order-cart")
public String showOrderCart(HttpServletRequest request,HttpServletResponse response,Model model){
List<CartItem> cartItemList = cartService.getCartItemListSync(request, response);
model.addAttribute("cartList", cartItemList);
return "order-cart";
} @RequestMapping("/create")
public String createOrder(Order order,Model model,HttpServletRequest request,HttpServletResponse response){
try {
//从request中取用户信息
TbUser user = (TbUser) request.getAttribute("user");
//在order对象中补全用户信息
order.setUserId(user.getId());
order.setBuyerNick(user.getUsername());
//调用服务
String orderId = orderService.createOrder(order,request, response);
model.addAttribute("orderId", orderId);
model.addAttribute("payment", order.getPayment());
model.addAttribute("date", new DateTime().plusDays(3).toString("yyyy-MM-dd"));
return "success";
} catch (Exception e) {
e.printStackTrace();
model.addAttribute("message", "创建订单出错,请稍后再试");
return "error/exception";
}
}
}

用户登录拦截器查询到登录用户后如何将用户信息传递到后面的Controller的更多相关文章

  1. 系统开发中使用拦截器校验是否登录并使用MD5对用户登录密码进行加密

    项目名称:客户管理系统 项目描述: 项目基于javaEE平台,B/S模式开发.使用Struts2.Hibernate/Spring进行项目框架搭建.使用Struts中的Action 控制器进行用户访问 ...

  2. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-10.Springboot2.x用户登录拦截器开发实战

    笔记 10.Springboot2.x用户登录拦截器开发实战     简介:实战开发用户登录拦截器拦截器 LoginInterceptor                  1.实现接口 LoginI ...

  3. 大型运输行业实战_day05_1_登录+注销+表单重复提交+登录拦截器

    1.登录 登录实现如下步骤: 1.在首页中添加登录按钮 html代码如下: <%@ page contentType="text/html;charset=UTF-8" la ...

  4. nodejs+express中设置登录拦截器

    在nodejs+express中,采用nodejs后端路由控制用户登录后,为了加强前端的安全性控制,阻止用户通过在浏览器地址栏中输入地址访问后台接口,在app.js中需要加入拦截器进行拦截: /*** ...

  5. Spring mvc登录拦截器

    自己实现的第一个Spring mvc登录拦截器 题目要求:拒绝未登录用户进入系统,只要发现用户未登录,则将用户请求转发到/login.do要求用户登录 实现步骤: 1.在spring的配置文件中添加登 ...

  6. sessionStorage记录返回前端的数据,用于解决登录拦截器刷新页面的问题

    1.问题出现的场景与解决 实现一个登录拦截器,重写doFilter方法,判断用户的登录状态,在用户长时间未操作或者异地登录时前端进行提示,完整代码如下 public class LoginValida ...

  7. node express 登录拦截器 request接口请求

    1.拦截器 拦截器可以根据需要 做权限拦截 登录只是权限的一种, 思路是req.session.user判断用户session是否存在,是否是需要拦截的地址, 如果是就跳转登录页,或其他页, 如果非需 ...

  8. Struts2 在登录拦截器中对ajax请求的处理

    前言: 由于ajax请求不像http请求,可以直接进行页面跳转,你返回的所有东西,ajax都只会识别为一个字符串. 之前尝试的方法是在拦截器中返回一个标识给ajax,然后再在每一个ajax请求成功之后 ...

  9. Springboot 拦截器配置(登录拦截)

    Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口   HandlerInterceptor, 重写里面需要的三个比较常用的方 ...

随机推荐

  1. .net 使用com组件操作word遇到的一些问题

    1.警告: 方法“Microsoft.Office.Interop.Word._Document.Close(ref object, ref object, ref object)”和非方法“Micr ...

  2. C if语句判断年龄

    #include <stdio.h> int main(int argc, char **argv) { //新建两个变量给变量赋值跟初始化:const int a=45;int c=0; ...

  3. CSS让内部元素以相反的顺序显示

    代码如下: <div id="main" style=" flex-direction: row-reverse;-webkit-flex-direction: r ...

  4. 哈希表 -数据结构(C语言实现)

    读数据结构与算法分析 哈希表 一种用于以常数平均时间执行插入.删除和查找操作的数据结构. 但是是无序的 一般想法 通常为一个包含关键字的具有固定大小的数组 每个关键字通过散列函数映射到数组中 冲突:两 ...

  5. adb 在windows7中的使用

    我的系统环境是win7 x64 首先放上资源链接:https://pan.baidu.com/s/1eTV5qX8 密码:2ejw 第一步: 配置环境变量,将adb.exe的路径添加到PATH里面去: ...

  6. 【zabbix 监控】第一章 zabbix的安装配置

    安装前准备 一.下载网络yum源: http://mirrors.163.com/.help/centos.html https://opsx.alibaba.com/mirror 1.首先备份/et ...

  7. C++ 学习笔记之——字符串和字符串流

    1. 字符数组 字符数组,也就是存放字符类型数据的数组,只不过字符数组的结尾必须是 '\0'.C++ 已经提供了一些字符串处理函数,这些函数被封装在头文件 和 <string.h> 中. ...

  8. Image控件显示以byte[]字节数组形式存在的图片

    工作中遇到了这样的一个问题.起初觉得很简单,获得了图片的byte[]后,可以将其转换成内存中的图片对象(如System.Drawing.Image),而后赋给页面的Image控件.尝试后才发现这样根本 ...

  9. vue移动音乐app开发学习(一):环境搭建

    本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 一:使用vue-cli脚手架搭建: 1: ...

  10. nginx虚拟目录实现两个后台使用

    购买了阿里云机器,准备搭建一套备份的后台,由于资源有限所以将两个后台搭建到一组SLB下的两台WEB上. 使用软件:NGINX+PHP root@xx conf.d]# yum install php- ...