我知道Spring Security有很多基于角色的授权功能。但是如果我有两个普通用户访问数据呢?如何让用户A看不到属于用户B的记录?例如,阻止用户A查看所有其他用户创建的订单?
请注意,这不是基于角色的授权。用户A和用户B等都是普通用户,只有他们的身份不同。
在现有的Spring应用程序中,我目前正在每个DAO中使用过滤器完成工作,确保" ...和user_id = $ 1 ..."是查询的一部分。这也减少了获取数据的数量,降低了数据库访问成本。
将来我会将我的应用程序分解为微服务。在我看来,每个微服务请求也必须具有UserDetails信息。这听起来像是反模式。
API网关只是我之前提到的方法的消费者。那么,将UserDetails信息传递给每个微服务我的最佳方法是什么?
我希望答案不是"为每个普通用户创建一个角色,例如" ROLE_USER_A"," ROLE_USER_B"等等。
谢谢,
杰罗姆。
答案 0 :(得分:0)
在现有的Spring应用程序中,我目前正在完成工作 在每个DAO中使用过滤器,确保“...和user_id = $ 1 ...” 部分查询。这也减少了获取数据的量, 降低数据库访问成本。
这是正确的方法
将来我会将我的应用程序分解为微服务。似乎
对我来说,每个微服务请求也必须具有UserDetails 信息。这听起来像是反模式。
您可以在这里使用几种方法。您可以使用spring security oauth,并将身份验证服务器分离到它自己的组件中。然后凭证将存储在中央位置。这将使您免于必须传递凭据。
另一种方法是使用周边安全性。基本上,您的网关服务将对每个请求进行身份验证,然后将用户详细信息传递给每个组件。
还有其他方法,但这两种方法很常见。