2

我有三行的分区表,比如

  • 分区 ID 名称

    1        divA
    2        divB
    3        divC
    

和客户表一样

custId 名称 DivisionId

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

和用户表一样

userId unname 密码 roleId divisionId

   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

角色 ID 名称

   1      ADMIN
   2      USER

当用户尝试使用三个参数登录时,例如 { "division" : "divA", "uname" : "john", "password": "****" }

如果用户成功登录,我将生成 JWT Token,包括部门、角色等

@GetMapping("/listcustomers")
public List<Customers> getCustomers(){
return customerService.findAll();
}

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

我正在使用 spring boot 2.0.0.Relaease、Java 8、Hibernate、JWT Authentication spring security

4

1 回答 1

1

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

import java.security.Principal;

@GetMapping("/listcustomers")
public List<Customers> getCustomers(Principal principal){
    String currentUser = principal.getName()
     return customerService.findByUsername(currentUser );
}
于 2018-09-04T07:23:18.717 回答