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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

3.4 认证服务查询用户权限
修改认证服务的UserDetailServiceImpl,查询用户的权限,并拼接权限串,将原来硬编码权限代码删除,代码如 下:
[AppleScript] 纯文本查看 复制代码
......
       //请求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] 纯文本查看 复制代码
#前端教学管理 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] 纯文本查看 复制代码
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] 纯文本查看 复制代码
/*获取jwt令牌*/ export const getjwt= () => {
   return http.requestQuickGet('/openapi/auth/userjwt') }



0 个回复

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