1. 购物车删除操作
1.1 页面分析
1.2 编辑CartController
/**
* 购物车删除操作
* url地址: http://www.jt.com/cart/delete/562379.html
* 参数: 获取itemId
* 返回值: 重定向到购物车的展现页面
*/
@RequestMapping("/delete/{itemId}")
public String deleteCarts(@PathVariable Long itemId){
Long userId = 7L;
cartService.deleteCarts(userId,itemId);
return "redirect:/cart/show.html";
}
1.3 编辑CartService
@Override
public void deleteCarts(Long userId, Long itemId) {
QueryWrapper<Cart> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
queryWrapper.eq("item_id", itemId);
cartMapper.delete(queryWrapper);
}
2. 京淘权限实现
2.1 业务需求
当用户进行敏感操作时,必须要求用户先登录之后才可以访问后端服务器. 例如京东商城…
使用技术:
1.AOP
2.拦截器 :拦截用户的请求
2.2 定义京淘拦截器
2.2.1 SpringMVC调用原理图
2.2.2 SpringMVC拦截器工作原理
2.2.3 配置拦截器
@Component //spring容器管理对象
public class UserInterceptor implements HandlerInterceptor {
@Autowired
private JedisCluster jedisCluster;
//Spring版本升级 4 必须实现所有的方法 spring 5 只需要重写指定的方法即可.
/**
* 需求: 拦截/cart开头的所有的请求进行拦截.,并且校验用户是否登录.....
* 拦截器选择: preHandler
* 如何判断用户是否登录: 1.检查cookie信息 2.检查Redis中是否有记录.
* true : 请求应该放行
* false: 请求应该拦截 则配合重定向的语法实现页面跳转到登录页面 使得程序流转起来
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//1.判断用户是否登录 检查cookie是否有值
String ticket = CookieUtil.getCookieValue(request,"JT_TICKET");
//2.校验ticket
if(!StringUtils.isEmpty(ticket)){
//3.判断redis中是否有值.
if(jedisCluster.exists(ticket)){
//4.动态获取json信息
String userJSON = jedisCluster.get(ticket);
User user = ObjectMapperUtil.toObj(userJSON,User.class);
request.setAttribute("JT_USER",user);
return true;
}
}
response.sendRedirect("/user/login.html");
return false;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
//销毁数据
request.removeAttribute("JT_USER");
}
}