首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring Boot / Spring Security中允许用户只访问自己的数据?

如何在Spring Boot / Spring Security中允许用户只访问自己的数据?
EN

Stack Overflow用户
提问于 2018-08-07 01:21:24
回答 3查看 13.8K关注 0票数 15

我有一些这样的rest api:

代码语言:javascript
运行
复制
/users/{user_id}
/users/{user_id}/orders
/users/{user_id}/orders/{order_id}

我必须如何确保它们的安全?每个用户必须只能看到她/他的数据,但管理员可以看到所有数据。

如何&我必须在Spring Security中实现Id为== 1的用户不能看到Id为== 2的用户的数据,反之亦然,期望角色为admin的用户可以看到所有用户?

是否在会话中的每个方法用户Id与传递给api的user_id参数相等之前进行检查?有没有更好的方法?

附言:我使用spring security的JWT。

EN

回答 3

Stack Overflow用户

发布于 2018-08-07 15:38:46

您还可以在服务接口上使用@PreAuthorize。如果你有一个自定义的userdetails对象,那么你可以很容易的做到。在我的一个项目中,我是这样做的:

代码语言:javascript
运行
复制
@PreAuthorize(value = "hasAuthority('ADMIN')"
        + "or authentication.principal.equals(#post.member) ")
void deletePost(Post post);

顺便说一下,这是在一个服务接口中。您必须确保添加正确的注释才能获得预授权才能工作。

票数 4
EN

Stack Overflow用户

发布于 2018-08-07 16:06:31

你应该首先选择你的安全策略,你需要什么名字“行过滤”,3A(认证,授权,审计)概念中的授权概念之一。

如果您想实施全面的解决方案,请查看以下内容:

代码语言:javascript
运行
复制
https://docs.spring.io/spring-security/site/docs/3.0.x/reference/domain-acls.html

Spring ACL完全涵盖了“行过滤”、“白黑名单”、“基于角色的授权”、"ACL继承“、”角色投票者“等概念。

否则,您应该保存每个您希望保护的业务案例的所有者,并在您的服务层中对其进行过滤。

票数 2
EN

Stack Overflow用户

发布于 2021-05-25 03:03:50

我们可以创建一个像@IsUser这样的注释,并将其与控制器方法一起使用。

示例:

代码语言:javascript
运行
复制
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize(value = "hasRole('ROLE_USER')" + "and authentication.principal.equals(#userId) ")
public @interface IsUser { }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51712724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档