Spring Boot JWT令牌明智地获取

时间:2018-09-01 10:34:02

标签: jwt spring-security-rest

我有三排分隔表,

  • divsionId名称

    <mat-form-field class="col-11">
      <mat-select 
        [(ngModel)]="node.nodeType" 
        (change)="nodeTypeChanged()" 
        placeholder="{{'node.node_type' | translate}}"
        [compareWith]="compareObjects">
        <mat-option 
          *ngFor="let item of nodeTypes" 
          [value]="item">
          <span [innerHTML]="item.iconVisual.iconCodeHtml"></span>
          <span> {{item.label}}</span>
        </mat-option>
      </mat-select>
    </mat-form-field>
    

和customertable之类的

custId名称DivisionId

1        divA
2        divB
3        divC

和用户表,例如

userId相同的密码roleId分区ID

1     cust01       1
2     cust02       1
3     cust03       2
4     cust04       1
5     cust05       2
6     cust06       3
7     cust07       3
8     cust08       1

角色ID名称

   1      john      ***       1          1
   2      ravi      ***       2          1
   3      bush      ***       2          2
   4      sam       ***       2          3
   5      jasd      ***       1          2
   6      jas       ***       2          2
   7      jioa      ***       2          3
   8      saho      ***       2          1
   9      vija      ***       1          1

当用户尝试使用以下三个参数登录时 { “ division”:“ divA”, “ uname”:“ john”, “密码”:“ ****” }

如果用户成功登录,我将生成JWT令牌,包括除法,角色等

   1      ADMIN
   2      USER

在这种情况下,当用户尝试从客户表访问/ listcustomers api时,他应该获得与登录用户的部门ID和仅客户分配部门的divisonId匹配的客户列表,并且他不应该能够访问任何地方的其他部门客户,这就是我在寻找问题的方式,不,我没有解决方案,请任何人帮助我,并且还有许多具有分区分配对象的api,ROLE可以正常工作,但是可以明智地进行分区我没有得到

我正在使用Spring Boot 2.0.0.Relaease,Java 8,Hibernate,JWT Authentication spring安全性

1 个答案:

答案 0 :(得分:0)

假设您创建了jwt令牌,则可以使用 Principal 来从令牌中获取用户名。然后,定义 findByUsername ,该返回该用户的已过滤客户。

import java.security.Principal;

@GetMapping("/listcustomers")
public List<Customers> getCustomers(Principal principal){
    String currentUser = principal.getName()
     return customerService.findByUsername(currentUser );
}