Java之品优购课程讲义_day16(5)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java之品优购课程讲义_day16(5),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3904字,纯文字阅读大概需要6分钟。
内容图文
![Java之品优购课程讲义_day16(5)](/upload/InfoBanner/zyjiaocheng/849/9884ef0f186e4b1ca05aabd766ddf871.jpg)
Redis存储购物车
4.1 需求分析
判断当前用户是否登陆,如果未登录采用 Cookie 存储,如果登录则采用 Redis 存储。登录后要进行 Cookie 购物车与 Redis 购物车的合并操作,并清除 Cookie 购物车。
4.2 获取当前登录人账号
4.2.1 配置文件
file:///C:\Users\user\AppData\Local\Temp\ksohtml\wpsCF82.tmp.pngspring-security.xml 更改配置: 去掉
<http pattern="/cart/*.do" security="none"></http>
添加
<http use-expressions="false" entry-point-ref="casProcessingFilterEntryPoint">
<intercept-url pattern="/cart/*.do" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
<intercept-url pattern="/**" access="ROLE_USER"/>
<custom-filter position="CAS_FILTER" ref="casAuthenticationFilter" />
<custom-filter ref="requestSingleLogoutFilter" before="LOGOUT_FILTER"/>
<custom-filter ref="singleLogoutFilter" before="CAS_FILTER"/>
</http>
access="IS_AUTHENTICATED_ANONYMOUSLY" 用于设置资源可以在不登陆时可以访问。
此 配 置 与 security="none" 的 区 别 在 于 当 用 户 未 登 陆 时 获 取 登 陆 人 账 号 的 值 为
anonymousUser ,而 security="none"的话,无论是否登陆都不能获取登录人账号的值。
4.1.1 代码实现
在 pinyougou-cart-web 的 findCartList 和 addGoodsToCartList 方法中,获取用户名
//得到登陆人账号,判断当前是否有人登陆
String username = SecurityContextHolder.getContext().getAuthentication().getName();
测试:当用户未登陆时,username 的值为 anonymousUser
4.1 远程购物车存取
4.1.1 服务接口层
pinyougou-cart-interface 中 CartService.java 定义方法
/**
*从 redis 中查询购物车
*@param username
*@return
*/
public List<Cart> findCartListFromRedis(String username);
/**
*将购物车保存到 redis
*@param username
*@param cartList
*/
public void saveCartListToRedis(String username,List<Cart> cartList);
4.1.1 服务实现层
pinyougou-cart-service 中 CartServiceImpl.java 实现方法
@Autowired
private RedisTemplate redisTemplate; @Override
public List<Cart> findCartListFromRedis(String username) {
System.out.println("从 redis 中提取购物车数据....."+username); List<Cart> cartList = (List<Cart>)
redisTemplate.boundHashOps("cartList").get(username);
if(cartList==null){ cartList=new ArrayList();
}
return cartList;
}
@Override
public void saveCartListToRedis(String username, List<Cart> cartList) {
System.out.println("向 redis 存入购物车数据....."+username); redisTemplate.boundHashOps("cartList").put(username, cartList);
}
4.1.1 控制层
修改 CartController.java 的 findCartList 方法
/**
*购物车列表
*@param request
*@return
*/
@RequestMapping("/findCartList")
public List<Cart> findCartList(){ String username =
SecurityContextHolder.getContext().getAuthentication().getName();
if(username.equals("anonymousUser")){//如果未登录
//读取本地购物车//
..........
return cartList_cookie;
}else{//如果已登录
List<Cart> cartList_redis =cartService.findCartListFromRedis(username);//从
redis 中提取
return cartList_redis;
}
}
修改 addGoodsToCartList 方法
/**
*添加商品到购物车
*@param request
*@param response
*@param itemId
*@param num
*@return
*/ @RequestMapping("/addGoodsToCartList")
public Result addGoodsToCartList(Long itemId,Integer num){
String username = SecurityContextHolder.getContext().getAuthentication().getName();
System.out.println("当前登录用户:"+username);
try {
List<Cart> cartList =findCartList();//获取购物车列表
cartList = cartService.addGoodsToCartList(cartList, itemId, num);
if(username.equals("anonymousUser")){ //如果是未登录,保存到 cookie util.CookieUtil.setCookie(request, response, "cartList",
JSON.toJSONString(cartList),3600*24 ,"UTF-8");
System.out.println("向 cookie 存入数据");
}else{//如果是已登录,保存到 redis
cartService.saveCartListToRedis(username, cartList);
}
return new Result(true, "添加成功");
} catch (RuntimeException e) { e.printStackTrace();
return new Result(false, e.getMessage());
}catch (Exception e) { e.printStackTrace();
return new Result(false, "添加失败");
}
}
为避免调用远程服务超时,我们可以将过期时间改为 6 秒(默认为 1 秒)
@Reference(timeout=6000)
private CartService cartService;
内容总结
以上是互联网集市为您收集整理的Java之品优购课程讲义_day16(5)全部内容,希望文章能够帮你解决Java之品优购课程讲义_day16(5)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。