畅购商城源码chapter10购物车讲义第10章_第1页
畅购商城源码chapter10购物车讲义第10章_第2页
畅购商城源码chapter10购物车讲义第10章_第3页
畅购商城源码chapter10购物车讲义第10章_第4页
畅购商城源码chapter10购物车讲义第10章_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringSecurity用户每次微服务的时候,先去oath.服务登录,登录后再微服务网关,微服务网关将请求转发给其他微服务处理。普通用户角色不能使用用户的删除操作,只有管理员才可以使用,那么这个时候就需要使用到SpingSecuity的权限控制功能了。在chango-sroat服务中,co.cangg.ot.cofig.UserDtaisServiceImpl上述代码给登录用户定义了三个角色,分别为salesman,accountant,user,这一块我们目前使用的@PreFilter@PostFilter。其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者@PreAuthorize注解,用于方法执行前进行权限检查,校验用户当前角色是否能该方法。在changgou-user-service的ResourceServerConfig类上添加@EnableGlobalMethodSecurity注在changgoug-service-user微服务的com.changgou.user.controller.UserControllerdelete()方法上添限控制注解@PreAuthorize,代码如下我们使用Pstmn测试,先创建令牌,然后将令牌数存放到头文件中微服务网关来调用s的seac方法,效果如下:地址 提交方式发现上面无法,因为用户登录的时候,角色不包含admi角色,而seac方法需要admin角,所以被了。购物车分为用户登录购物车和未登录购物车操作,国内知名京东用户登录和不登录都可以操作购物车,如果用户不登录,操作购物车可以将数据到 ,用户登录后购物车数据可以到s中,再将之前未登录加入的购物车合并到s中即可。我们今天实现的购物车是天猫解决方案,即用户必须先登录才能使用购物车功能。用户在商品详细页点击加入购物车,提交商品SKU编号和数量,添加到购物车。购物车展示页面下:changgou_order数据中tb_order_itemCREATECREATETABLE`tb_order_item``id`varchar(20)COLLATEutf8_binNOTNULLCOMMENT`category_id1`int(11)DEFAULTNULLCOMMENT'1级分类`category_id2`int(11)DEFAULTNULLCOMMENT'2级分类`category_id3`int(11)DEFAULTNULLCOMMENT'3级分类`spu_id`varchar(20)COLLATEutf8_binDEFAULTNULLCOMMENT`sku_id`bigint(20)NOTNULLCOMMENT`order_id`bigint(20)NOTNULLCOMMENT'订单`name`varchar(200)COLLATEutf8_binDEFAULTNULLCOMMENT'商品名称`price`int(20)DEFAULTNULLCOMMENT'单价`num`int(10)DEFAULTNULLCOMMENT'数量`money`int(20)DEFAULTNULLCOMMENT'总金额`pay_money`int(11)DEFAULTNULLCOMMENT'实付金额`image`varchar(200)COLLATEutf8_binDEFAULTNULLCOMMENT 地址`weight`int(11)DEFAULTNULLCOMMENT'重量`post_fee`int(11)DEFAULTNULLCOMMENT'运费`is_return`char(1)COLLATEutf8_binDEFAULTNULLCOMMENT'是否退货',PRIMARYKEY(`id`),KEY`item_id`(`sku_id`),KEY`order_id`(`order_id`))ENGINE=InnoDBDEFAULTCHARSET=utf8 publicclassSkuControllerprivateSkuServicepublicResult<Sku>findById(@PathVariable("id")Stringid){Skusku=skuService.findById(id);returnnewResult(true,StatusCode.OK,"查询成功}}@param publicResult<Sku>findById(@PathVariable("id")String订单服务新建 publicclassCartControllerprivateCartService@param@param Integernum){Stringusername=returnnewResult(true,StatusCode.OK,"加入购物车成功}}publicclassCartServiceImplimplementsCartServiceprivatestaticfinalStringprivate te privateSkuFeignprivateSpuFeign@parampublicvoidadd(StringskuId,Integernum,Stringusername)OrderItemorderItem=(OrderItem)if(orderItem!=Skusku=skuResult.getData();Spuspu=orderItem=}}privateOrderItemsku2OrderItem(Skusku,Spuspu,Integer{OrderItemorderItem=newOrderItem(); //单价* returnorderItem;}}接着我们实现一次购物车列表操作。因为存的时候是根据用户名往s中用户的购物车数据的所以我们这里可以将用户的名字作为y去es中查询对应的数据。3.4.2com.changgou.order.controller.CartController (value="/list")publicMaplist(){Stringusername=" returncartService.list(username);}Maplist(String@parampublicMaplist(String{Mapmap=newList<OrderItem>orderItemList IntegertotalNum=0;IntegertotalPrice0;for(OrderItemorderItem:{totalNum+=orderItem.getNum();}returnmap;}使用Postman 如上图所示,务,再通过fign调用购物车订单微服务来实现购物车的操作,例如:加入购物车、购物车列表。在changgou_web中搭建订单购物车微服务工程changgou_web_order,该工程主要实现购物车和订单 application.ymlname:order-weballow-bean-definition-overriding: :defaultZone:prefer-ip-address:true: #配置全局的feignconnectTimeout60000指定的是消费者连接服务提供者的连接超时时间是否能连接readTimeout:80000#指定的是调用服务提供者的服务的超时时间()单位是毫秒#hystrixenabled:truestrategy:SEMAPHORE#熔断器超时时间,默认:1000/timeoutInMilliseconds80000ReadTimeout4000ConnectTimeout:创建com.changgou.OrderWebApplicationpublicpublicclassOrderWebApplicationpublicstaticvoidmain(String[]{}}Feign在changou_servic_odri中添加Crtegn接口,并在接口中创建添加购物车和查询购物车列表,代码如下:publicinterfaceCartFeign@param@param Integernum); (value="/cart/list")publicMaplist();} publicclassCartControllerprivateCartFeign*publicStringlist(Modelmodel){Mapmap=return"cart";}* publicResult<Map>add(Stringid,IntegercartFeign.add(id,Mapmap=returnnewResult<>(true,StatusCode.OK,"添加购物车成功}3.2.3<!--<!--vueloadlist--<divclass="cart-list"v-for="iteminitems.orderItemList":key="item.index"><ulclass="goods-listyui3-<liclass="yui3-u-1-<inputtype="checkbox"name="chk_list"value=""<liclass="yui3-u-6-<divclass="good-<divclass="item-<img:src="item.image"<divclass="item-<liclass="yui3-u-5-<divclass="item-<liclass="yui3-u-1-<span<liclass="yui3-u-1-<ahref="javascript:void(0)"@click="add(item.skuId,-1)"class="incrementmins">-</a> plete="off"type="text"v-model="item.num"@blur="add(item.skuId,item.num)"value="1"minnum="1"class="itxt"/><ahref="javascript:void(0)"@click="add(item.skuId,1)"class="incrementplus">+</a><liclass="yui3-u-1-<spanvalue=""

<liclass="yui3-u-1-<ahref="#none">删除<br<ahref="#none">移到收藏<divclass="cart-<divclass="select-<inputclass="chooseAll"type="checkbox"name=""<div<ahref="#none">删除选中的商品<ahref="#none">移到我的关注<ahref="#none">清除下柜商品<divclass="money-<divclass="chosed"><div<em>总价(不含运费):<i<div<<scriptth:inline="javascript">varapp=newVue({el:data()returnitems:}add:function(skuId,{axios.get("/wcart/add?skuId="+skuId+"&num="+num).then(function(response){(response.data.flag){app.items=resp}}}修改微服务网关hanggo-gatewa-web的aplictio.yl配置文件,添加ode的路由过滤配置,配置如下:id:changgou_order_routeuri:lb://order-id:changgou_order_web_routeuri:lb://order-web用户可以点击号或者号,或者手动输入一个数字,然后更新购物车列表,我们可以给-+数字框一个失去焦点,然后调用,实现购物车的更新。修改cago .cango.or.seric.ilCarServceImp的add法添加如下代码:oauth3)@EnableGlobalMethodSecurity(prePostEnabled=true,securedEnabled=true)privatestaticfinalStringPUBLIC_KEY=@parampublicTokenStoretokenStore(JwtAccessTokenConverterjwtAccessTokenConverter){returnnew}publicJwtAccessTokenConverterreturn}获取非对称加密公钥@return公钥trytryInputStreamReaderinputStreamReader=newreturnbr.lines().collect(Collectors.joining("\n"));}catch(IOException{return}} @param@throwspublicvoidconfigure(HttpSecurityhttp)throwsException }}如上图:因为微服务之间并没有传递头文件,所以我们可以定义一个器,每次微服务调用之前都检查下头文件,将请求的头文件中的令牌数据再放入到headr中,再调用其他微服务即可。publicclassFeignInterceptorimplementsRequestInterceptorpublicvoid te te)RequestAttributesrequestAttributes=ifHttpServletRequestrequest=((ServletRequestAttributes)ifEnumeration<String>headerNames=request.getHeaderNames();if(headerNames!=null){whileStringheaderName=headerNames.nex if(headerName.equals("authorization")){StringheaderValue=request.getHead

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论