Java的新项目学成在线笔记-day18(五)

3.4 认证服务查询用户权限 
修改认证服务的UserDetailServiceImpl,查询用户的权限,并拼接权限串,将原来硬编码权限代码删除,代码如 下:

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

......

       //请求ucenter查询用户

 XcUserExt userext = userClient.getUserext(username);   

     if(userext == null){     

       //返回NULL表示用户不存在,Spring Security会抛出异常     

       return null;   

     }    

    //从数据库查询用户正确的密码,Spring Security会去比对输入密码的正确性  

      String password = userext.getPassword();   

     //指定用户的权限,这里暂时硬编码    

    List<String> permissionList = new ArrayList<>(); //    

   permissionList.add("course_get_baseinfo"); //  

     permissionList.add("course_find_pic");    

    //取出用户权限    

    List<XcMenu> permissions = userext.getPermissions();   

     for(XcMenu xcMenu:permissions){       

     permissionList.add(xcMenu.getCode())

       }  

      ......


3.5 测试 
1、执行登录,在redis中查看jwt令牌,使用jwt测试程序解析jwt令牌中是否包括用户的权限 。
2、使用新的jwt令牌测试方法授权
3、给用户分配新权限,重新生成jwt令牌,测试授权   4 前端集成认证授权 
4.1 需求分析 
截至目前认证授权服务端的功能已基本完成,本章实现前端集成认证授权功能。
前端集成认证授权功能需要作如下工作:
1、前端页面校验用户的身份,如果用户没有登录则跳转到登录页面 
2、前端请求资源服务需要在http header中添加jwt令牌,资源服务根据jwt令牌完成授权。 哪些功能需要前端请求时携带JWT?
用户登录成功请求资源服务都需要携带jwt令牌,因为资源服务已经实现了jwt认证,如果校验头部没有jwt则会认为 身份不合法。
  4.2教学管理中心 

本节实现教学管理中心实现身份校验,其它前端参考教学管理中心实现。

4.2.1 配置虚拟主机 
教学管理前端访问微服务统一在访问地址前添加/api前缀并经过网关转发到微服务。 配置teacher.xuecheng.com虚拟主机。
 

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#前端教学管理 upstream teacher_server_pool{ server 127.0.0.1:12000 weight=10;  

   } #文件服务 upstream filesystem_server_pool{ server 127.0.0.1:22100 weight=10;   

  }  #媒资服务 upstream media_server_pool{ server 127.0.0.1:31400 weight=10;   

  } #学成网教学管理中心 server { listen   

   80

    server_name teacher.xuecheng.com;   

  #个人中心  

   location / {   

    proxy_pass http://teacher_server_pool;    

       }    

  location /api {    

   proxy_pass http://api_server_pool; 

          }  

   location /filesystem {   

    proxy_pass http://filesystem_server_pool;  

         }   

  #媒资管理 

    location ^~ /api/media/ {   

    proxy_pass http://media_server_pool/media/;  

         }   

   #认证  

   location ^~ /openapi/auth/ {   

    proxy_pass http://auth_server_pool/auth/;  

         }    

    }

4.2.2身份校验 
教学管理中心是单页面应用,我们在路由变化时校验用户的身份,校验失败将跳转到登录页面。
校验方法如下:
1、如果成功从sessionStorage和cookie获取当前用户则继续访问
2、如果sessionStorage中无当前用户,cookie中有当前用户则请求服务端获取jwt,如果成功则继续访问。
3、以上两种情况都不满足则跳转到登录页面。

在main.js中添加路由监控代码,如下:

[AppleScript] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

router.beforeEach((to, from, next) => {   if(openAuthenticate){  

    // console.log(to)    

// console.log(from)  

  //***********身份校验*************** 

   let activeUser

    let uid   

 try{   

   activeUser = utilApi.getActiveUser()   

   uid = utilApi.getCookie("uid")  

  }catch(e){  

    //alert(e) 

   }  

  if(activeUser && uid && uid == activeUser.uid) {

      next();

    }else if(to.path =='/login' || to.path =='/logout'){ 

     next();   

 }else if(uid){     

   //请求获取jwt 

     systemApi.getjwt().then((res)=>{     

   if(res.success){     

     let jwt = res.jwt;  

        let activeUser = utilApi.getUserInfoFromJwt(jwt)

          if(activeUser){      

      utilApi.setUserSession("activeUser",JSON.stringify(activeUser))    

      }   

       next();   

     }else{      

    //跳转到统一登陆    

      window.location = "http://ucenter.xuecheng.com/#/login?returnUrl="+  Base64.encode(window.location)  

      }  

    })  

  }else{   

   //跳转到统一登陆 

     window.location = "http://ucenter.xuecheng.com/#/login?returnUrl="+  Base64.encode(window.location) 

   } 

 }else{ 

   next();

  } 

 });


2、在base/api/system.js中添加getjwt方法

[AppleScript] 纯文本查看 复制代码

?

1

2

/*获取jwt令牌*/ export const getjwt= () => {

   return http.requestQuickGet('/openapi/auth/userjwt') }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值