Spring Security如何让用户A远离用户B的数据?

时间:2018-05-16 17:09:28

标签: spring spring-security authorization jwt

我知道Spring Security有很多基于角色的授权功能。但是如果我有两个普通用户访问数据呢?如何让用户A看不到属于用户B的记录?例如,阻止用户A查看所有其他用户创建的订单?

请注意,这不是基于角色的授权。用户A和用户B等都是普通用户,只有他们的身份不同。

在现有的Spring应用程序中,我目前正在每个DAO中使用过滤器完成工作,确保" ...和user_id = $ 1 ..."是查询的一部分。这也减少了获取数据的数量,降低了数据库访问成本。

将来我会将我的应用程序分解为微服务。在我看来,每个微服务请求也必须具有UserDetails信息。这听起来像是反模式。

API网关只是我之前提到的方法的消费者。那么,将UserDetails信息传递给每个微服务我的最佳方法是什么?

我希望答案不是"为每个普通用户创建一个角色,例如" ROLE_USER_A"," ROLE_USER_B"等等。

谢谢,

杰罗姆。

1 个答案:

答案 0 :(得分:0)

  

在现有的Spring应用程序中,我目前正在完成工作   在每个DAO中使用过滤器,确保“...和user_id = $ 1 ...”   部分查询。这也减少了获取数据的量,   降低数据库访问成本。

这是正确的方法

将来我会将我的应用程序分解为微服务。似乎

  

对我来说,每个微服务请求也必须具有UserDetails   信息。这听起来像是反模式。

您可以在这里使用几种方法。您可以使用spring security oauth,并将身份验证服务器分离到它自己的组件中。然后凭证将存储在中央位置。这将使您免于必须传递凭据。

另一种方法是使用周边安全性。基本上,您的网关服务将对每个请求进行身份验证,然后将用户详细信息传递给每个组件。

还有其他方法,但这两种方法很常见。