尚学堂java笔记day18_Java的新项目学成在线笔记-day18(六)

3、在utils.js中添加 如下方法

[mw_shl_code=applescript,true]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;

},

[/mw_shl_code]

4、测试 1)启动学习中心前端、教学管理前端、认证服务、用户中心服务、网关、Eureka

a、进入首页 b、点击“教学提供方”,此时由于没有登录自动跳转到登录页面

b265d9def63c27104e854f6c279d356f.png

4.2.2 携带JWT授权

1、前端携带JWT请求

根据需求,在使用axios进行http请求前向header中加入jwt令牌 在main.js中添加

[mw_shl_code=applescript,true]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); });

[/mw_shl_code]

2、测试http请求是否携带jwt

进入教学管理中心,点击我的课程,观察request header中是否有Authorization信息

97651e3cb171be2e5b21ef90e8e297c8.png

3、测试授权效果

当访问一个没有权限的方法时是否报错?

测试方法:

在课程计划查询方法上添加授权注解,表示当前用户需要拥有course_teachplan_list权限方可正常访问。

[mw_shl_code=applescript,true]@PreAuthorize("hasAuthority('course_teachplan_list')")

@Override public TeachplanNode findTeachplanList(@PathVariable("courseId") String courseId) {

return courseService.findTeachplanList(courseId); }

[/mw_shl_code]

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

f95c5b1d7ce1c522dff6827dfb6ab32c.png

4、提示权限不足

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

[mw_shl_code=applescript,true]

@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('您没有此操作的权限,请与客服联系!

');

}

[/mw_shl_code]

[mw_shl_code=applescript,true] }

return data })

[/mw_shl_code]

测试:

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

48321c4a4f3ac8f92ccc2c35dbcc5cf8.png


版权声明:本文为weixin_39861734原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。