版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学成-第18天-讲义-用户1用户业务流用户的业务流程如下业务流程说明如 写入token(身份令牌2、前端携带token请求用户中心服务获取jwt令3、前端携 前端请求资源服务前在httpheader上添加jwt4、网关校验token用户请求必须携带令牌和jwt令22publicQueryResult<CourseInfo>findCourseList(@PathVariable("page")int@PathVariable("size")intsize,CourseListRequestcourseListRequest)3、当请求有权限的方法时正4、当请求没有权限的方法时修改认证服务的UsrDtiSricIl类,下边的代码中risionist列表中存放了用户的权限,并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Srigsecrity。//指定用户的权限,这里List<String>permissionList=newArrayList<>();//将权限串中间以逗号分StringpermissionString=StringUtils.join(permissionList.toArray(),//Stringuser_permission_string="";UserJwtuserDetails=newUserJwt(username,//用户名重启认证服务工程,使用postman完成登录,从ris中找到jt令牌。使用jwt的测试程序查看此令牌的内容。Id":null,"userpic":null,"user_name":"mrt","scope":["app"],"name":"教学管员 可以看到属性中为用户的权限资源服务添加控方法上添加注publicQueryResult<CourseInfo>findCourseList(@PathVariable("page")int@PathVariable("size")intsize,CourseListRequestcourseListRequest)publicCourseBasegetCourseBaseById(@PathVariable("courseId")String////激活方法上的PreAuthorize@EnableGlobalMethodSecurity(prePostEnabled=true,securedEnabled= Get请 org.springframework.security.access.AccessDeniedException:不允许说明:如果方法上没有添加注解 security将不进行控制,只要jwt令牌合法则可以正常异常上边当没有权限时资源服务应该返回下边的错误代码UNAUTHORISE(false,10002,"UNAUTHORISE(false,10002,"权限不足,无权操进入资源服务(这里是课程管理),添加异常类AccessDeniedException.class与错误代码10002的对应关publicclassCustomExceptionCatchextendsExceptionCatchstaticbuilder.put(AccessDeniedException.class,CommonCode.UNAUTHORISE);}}再次测试,结果如下方法步骤////激活方法上的PreAuthorize@EnableGlobalMethodSecurity(prePostEnabled=true,securedEnabled=2、在方法添加注动态查询用户 数据模型结xc_user:用户表,了系统用户信息,用户类型包括:学生、老师、管理员等xc_role:数据模型的使本项目教学阶段不再实现权限定义及用户权限分配的功能,但是基于权限数据模型(张数据表)确定用户的SELECTSELECT*FROMWHEREid _idFROMxc_permissionWHEREIN(SELECTrole_idFROMxc_user_roleWHEREuser_id=))2、给用户分配权向已拥有角色分配权限:向角色权限表添加记添加角色给用户:向角色权限表添加记向用户角色关系表添加记需求分本小节实现用户查询查询用户权限,并将用户权限信息添加到的用户信息中返回给认证服务。以上需求需要接口 publicXcUserExtgetUserext(@RequestParam("username")String在com.xuecheng.ucenter.daopublicinterface Mapperpublic >selectPermissionByUserId(String}在com.xuecheng.ucenter.dao下定义Xc<?xml<?xmlversion="1.0"encoding="UTF‐8"<!DOCTYPEmapperPUBLIC"‐////DTDMapper3.0//EN"mapper.dtd"<mapper Mapper"<selectp_id"parameterType="java.lang.String" create_timecreateTime,update_timeupdateTiemWHEREid_idFROMxc_permissionWHEREIN(SELECTrole_idFROMxc_user_roleWHEREuser_id))其它Dao采用springdata编写////根据账号查询用户的信息,返回用户扩publicXcUserExtgetUserExt(StringXcUserxcUser=this.findXcUserByUsername(username);if(xcUser==null){return}//根据用户id查询用户权StringuserId= >xc s=xc XcUserExtxcUserExt=newXcUserExt();//用户的权 returnxcUserExt;}修改认证服务的UsrDtiSricIl,查询用户的权限,并拼接权限串,将原来硬编码权限代码删除,代码如下://请求ucenter 44前端集成认2、前端请求资源服务需要在htpeaer中添加jt令牌,资源服务根据jwt令牌完成。哪些功能需要前端请求时携带JWT?用户登录成功请求资源服务都需要携带jw令牌,因为资源服务已经实现了jwt认证,如果校验头部没有jw不合法。配置虚拟主教学管理前端微服务统一在地址前添加/ai前缀并经过网关转发到微服务。配置e 虚拟主机。##前端教学管upstreamserver:12000}filesystem_server_pool{server:22100weight=10;}#媒资服upstreamserver:31400}server{ server_namelocation}location/api}location/filesystem}#媒资管location^~/api/media/}#认location^~/openapi/auth/};;;;;;}校3、以上两种情况都不满足则跳转到登录页面router.beforeEach((to,from,next){////letactiveUserletuidactiveUser=utilApi.getActiveUser()uid=utilApi.get("uid")}if(activeUser&&uid&&uid=={}elseif(to.path=='/login'||=='/logout'){}elseletjwt=res.jwt;letactiveUser=utilApi.getUserInfoFromJwt(jwt)}//跳转到统一window.location="/#/login?returnUrl="+}//跳转到统一window.location="/#/login?returnUrl="+}}2、在base/api/system.js中添加getjwt3、在utils.js中添加如下方法getActiveUser:getActiveUser:letuid=this.get letactiveUserStr=this.getUserSession("activeUser");returnJSON.parse(activeUserStr);}//获取jwt令getJwt:letactiveUser=this.getActiveUser()return}//解析jwt令牌,获取用户getUserInfoFromJwt:function(jwt){return}varjwtDecodeVal=jwtDecode(jwt);if(!jwtDecodeVal){return}letactiveUser.utype=jwtDecodeVal.utype||'';activeUser.username=jwtDecodeV||'';activeUser.userpic=jwtDecodeVal.userpic||'';activeUser.userid=jwtDecodeVal.userid||''; =jwtDecodeVal. ||'';activeUser.uid=jwtDecodeVal.jti||'';activeUser.jwt=jwt;returnactiveUser;4、测c、输入账号和登登录成功,跳转到教学管理4.2.2携带根据需求,在使用axis进行tp请求前向hadr中加入jt令牌在mis中添加importimportaxiosfrom//添加请求器erceptors.request.use(function(config)//在发送请求向header添加jwtletjwt=utilApi.getJwt()config.headers['Authorization']='Bearer}return},function(error)return2、测试http请求是否携带进入教学,点击我的课程,观察 3、测试效在课程计划查询方法上添加注解,表示当前用户需要拥有course_teachn_list权限方可正常 public nNode nList(@PathVariable("courseId")String{return }进入我的课程,点击课程计划,观察响应结果为10002错误4、提示权限不当权限不足首页要给出提示,实现思路是使用xis的,在执行后校验响应结果,如果是10002代码的误则提示用户“权限不足,如果是10001代码则强制登录。在main.js////响erceptors.response.use(data{console.log("data=")if(data&&data.data){if(data.data.code&&data.data.code//需要登window.location=" }elseif(data.data.code&&=='10002'){Message.error('您没有此操作的权限,请与客服联系!');测试执行一个没有权限的操作,提示如下细粒度什么是细粒度细粒度也叫数据范围,即不同的用户所拥有的操作权限相同,但是能够操作的数据范围是不一样的。一例子:用户A和用户B都是教学机构,他们都拥有我的课程权限,但是两个用户所查询到的数据是不一样的。如何实现细粒度细粒度涉及到不同的业务逻辑,通常在sric层实现,根据不同的用户进行校验,根据不同的参数查询不同的数据或操作不同的数据。需求分获取当前登录的用户得到用户所属教育机构的最终实现了用户只允许查询自己机构的课程修改Dao,支持根据公司Id3、数据模型分析如下课程 用户企业 1、确定用户的publicpublicQueryResponseResult<CourseInfo>findCourseList(intintCourseListRequest修改CourseMapper.xml的查询课程列表,添加Id条件<select<selectid="findCourseListPage" (SELECTpicFROMcourse_picWHEREcourseid=course_base.id)picwhere<ifId!=nullpany_id=publicpublicQueryResult<CourseInfo>size,CourseListRequestcourseListRequest){if(courseListRequest==null){courseListRequest=new}//企业Id,int panyId传给page=}size=修改CourseController的findCourseList, 传 这里先使用静态数据测试使用 publicQueryResult<CourseInfo>findCourseList(@PathVariable("page")int@PathVariable("size")intsize,CourseListRequestcourseListRequest){//先使用静态 Id=return}3.3.5测1、用户登观察所查询到的课程是该企业下的课程需求分jwt令牌包括企业资源服务在时需要用到用户所属企业ID,需要实现认证服务生成的JWT令牌中包括用户所属公司i查看认证服务UsrDtiSricIl代码如下:////用户所属企业 returnuserDetails;通过上边代码的分析得知,认证服务调用XcUserExtuserext=user.getUserext(username);获取用户信息,将userext中的信息到jwt令牌中,在userext对象中已经包括了Id公司ID等信息。获取当前用JWTpublicpublicclassOauth2UtilpublicstaticMap<String,String>getJwtClaimsFromHeader(HttpServletRequest{if(request==null){returnnull;}//取出头信Stringauthorization=if(StringUtils.isEmpty(authorization)||authorization.indexOf("Bearer")<{return}//从Bearer后边开始取出Stringtoken=authorization.substring(7);Map<String,String>map=null;try//解析Jwtdecode=//得到jwt中的用户信息Stringclaims=//将jwt转为publicpublicclassXcOauth2UtilpublicUserJwtgetUserJwtFromHeader(HttpServletRequestMap<String,String>jwtClaims=Oauth2Util.getJwtClaimsFromHeader(request);if(jwtClaims==null||StringUtils.isEmpty(jwtClaims.get("id"))){return}UserJwtuserJwt=newUserJwt(); returnuserJwt;}publicUserJwt{privateStringid;privateStringname;privateStringuserpic;privateStringutype;private }publicQueryResult<CourseInfo>findCourseList(@PathVariable("page")int@PathVariable("size")intsize,CourseListRequestcourseListRequest){//调用工具类取出用户信XcOauth2UtilxcOauth2Util=newXcOauth2Util.UserJwtuserJwt=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年合作框架:出租车司机派遣协议
- 2024年医疗设备制造与销售合同
- 企业设备维保合同模板
- 2024年临时仓储地租赁合同
- 2024年云计算平台建设与运营协议
- 工业自动化电气工程实施方案
- 不锈钢合同模板
- 卖房还用简易合同模板
- 国际铁路技术转让合同模板
- 定制首饰服务合同模板
- 《幼儿园保育教育质量评估指南》解读
- 焦炉煤气制液化天然气LNG可行性研究报告书
- 销售人员如何列名单与名单
- GB/T 24934-2010全地形车型号编制方法
- 【课件】2.1 使市场在资源配置中起决定性作用 课件高中政治统编版必修二经济与社会
- GB/T 10476-2004尿素高压冷凝器技术条件
- GA/T 947.4-2015单警执法视音频记录系统第4部分:数据接口
- 污染土壤的修复课件
- 《外科学》阑尾疾病-课件
- 气动三通阀门使用说明书及维修手册
- 狐狸和公山羊课件
评论
0/150
提交评论