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

1 用户授权业务流程 
用户授权的业务流程如下:
 
业务流程说明如下:
1、用户认证通过,认证服务向浏览器cookie写入token( 身份令牌)
2、前端携带token请求用户中心服务获取jwt令牌

前端获取到jwt令牌解析,并存储在sessionStorage 
3、前端携带cookie中的身份令牌及jwt令牌访问资源服务

前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt
  前端请求资源服务前在http header上添加jwt请求资源
4、网关校验token的合法性

用户请求必须携带身份令牌和jwt令牌
  网关校验redis中user_token的有效期,已过期则要求用户重新登录
5、资源服务校验jwt的合法性并进行授权
  资源服务校验jwt令牌,完成授权,拥有权限的方法正常执行,没有权限的方法将拒绝访问。

2 方法授权 2.1需求分析 
方法授权要完成的是资源服务根据jwt令牌完成对方法的授权,具体流程如下: 
1、生成Jwt令牌时在令牌中写入用户所拥有的权限
我们给每个权限起个名字,例如某个用户拥有如下权限:
course_find_list:课程查询 course_pic_list:课程图片查询
  2、在资源服务方法上添加注解PreAuthorize,并指定此方法所需要的权限 例如下边是课程管理接口方法的授权配置,它就表示要执行这个方法需要拥有course_find_list权限。
 

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

?

1

2

3

@PreAuthorize("hasAuthority('course_find_list')") @Override public QueryResult<CourseInfo> findCourseList(@PathVariable("page") int page,           

                                   @PathVariable("size") int size,             

                                 CourseListRequest courseListRequest)


3、当请求有权限的方法时正常访问 
4、当请求没有权限的方法时则拒绝访问  
2.2 jwt令牌包含权限 
修改认证服务的UserDetailServiceImpl类,下边的代码中 permissionList列表中存放了用户的权限,
并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Spring security。
 

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

?

01

02

03

04

05

06

07

08

09

10

11

12

13

......  

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

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

     permissionList.add("course_get_baseinfo");   

     permissionList.add("course_find_pic");  

      //将权限串中间以逗号分隔      

  String permissionString = StringUtils.join(permissionList.toArray(), ",")

      //String user_permission_string = "";   

     UserJwt userDetails = new UserJwt(username,     

           password,       

         AuthorityUtils.commaSeparatedStringToAuthorityList(permissionString));   

     //用户名称

        userDetails.setName(userext.getName());

 

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

?

1

2

3

//用户头像    

    userDetails.setUserpic(userext.getUserpic())

       ......


重启认证服务工程,使用postman完成登录,从redis中找到jwt令牌。
使用jwt的测试程序查看 此令牌的内容。
 

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

?

1

{"companyId":null,"userpic":null,"user_name":"mrt","scope":["app"],"name":"教学管理 员","utype":"101002","id":"49","exp":1527202013,"authorities": ["course_find_pic","course_get_baseinfo"],"jti":"9360fa85‐c1b4‐428a‐80ecb2e705a02827","client_id":"XcWebApp"}


可以看到authorities属性中为用户的权限。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值