A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 谷粒姐姐 于 2019-7-9 14:24 编辑

3、在utils.js中添加 如下方法
[AppleScript] 纯文本查看 复制代码
getActiveUser: function(){     let uid = this.getCookie("uid")    
 if(uid){  
     let activeUserStr = this.getUserSession("activeUser");   
    return JSON.parse(activeUserStr);     }else{   
    this.delUserSession("activeUser")  
   }  
 }, //获取jwt令牌   getJwt : function(){  
   let activeUser = this.getActiveUser()  
   if(activeUser){  
     return activeUser.jwt  
   }
   },   
//解析jwt令牌,获取用户信息 
  getUserInfoFromJwt : function (jwt) {   
  if(!jwt){  
     return ;  
   }   
  var jwtDecodeVal = jwtDecode(jwt);  
   if (!jwtDecodeVal) {    
   return ; 
    }  
   let activeUser={}  
   //console.log(jwtDecodeVal)   
  activeUser.utype = jwtDecodeVal.utype || '';  
   activeUser.username = jwtDecodeVal.name || '';   
  activeUser.userpic = jwtDecodeVal.userpic || '';  
   activeUser.userid = jwtDecodeVal.userid || '';  
   activeUser.authorities = jwtDecodeVal.authorities || '';   
  activeUser.uid = jwtDecodeVal.jti || '';   
  activeUser.jwt = jwt;   
  return activeUser; 
  },

4、测试 1)启动学习中心前端、教学管理前端、认证服务、用户中心服务、网关、Eureka
a、进入首页 b、点击“教学提供方”,此时由于没有登录自动跳转到登录页面


4.2.2  携带JWT授权
1、前端携带JWT请求
根据需求,在使用axios进行http请求前向header中加入jwt令牌 在main.js中添加

[AppleScript] 纯文本查看 复制代码
import axios from 'axios'  
 // 添加请求拦截器 axios.interceptors.request.use(function (config) {
   // 在发送请求向header添加jwt   let jwt = utilApi.getJwt()  
 if(jwt){
     config.headers['Authorization'] = 'Bearer '+jwt 
  } 
  return config; }, function (error) {  
 return Promise.reject(error); });

2、测试http请求是否携带jwt
进入教学管理中心,点击我的课程,观察request header中是否有Authorization信息


3、测试授权效果
当访问一个没有权限的方法时是否报错?
测试方法:
在课程计划查询方法上添加授权注解,表示当前用户需要拥有course_teachplan_list权限方可正常访问。

[AppleScript] 纯文本查看 复制代码
@PreAuthorize("hasAuthority('course_teachplan_list')") 
@Override public TeachplanNode findTeachplanList(@PathVariable("courseId") String courseId) {  
   return courseService.findTeachplanList(courseId); }

进入我的课程,点击课程计划,观察响应结果为 10002错误。


4、提示权限不足
当权限不足首页要给出提示,实现思路是使用axios的拦截,在执行后校验响应结果,如果是10002代码的错误则 提示用户“权限不足”,如果是10001代码则强制登录。 在main.js中添加

[AppleScript] 纯文本查看 复制代码
 
@PreAuthorize("hasAuthority('course_teachplan_list')") 
@Override public TeachplanNode findTeachplanList(@PathVariable("courseId") String courseId) {  
   return courseService.findTeachplanList(courseId); }
// 响应拦截 axios.interceptors.response.use(data => {  
 console.log("data=")  
 console.log(data) 
  if(data && data.data){  
   if(data.data.code && data.data.code =='10001'){    
   //需要登录    
    window.location = "http://ucenter.xuecheng.com/#/login?returnUrl="+  Base64.encode(window.location)   
  }else if(data.data.code && data.data.code =='10002'){   
    Message.error('您没有此操作的权限,请与客服联系!
');   
  }

[AppleScript] 纯文本查看 复制代码
 } 
  return data })

测试:
执行一个没有权限的操作,提示如下:




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马