gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 22:39:42 26 4
gpt4 key购买 nike

我有一些像这样的休息 api:

/users/{user_id}
/users/{user_id}/orders
/users/{user_id}/orders/{order_id}

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

我必须在 Spring Security 中如何和什么实现,用户通过 Id == 1 无法通过 Id == 2 看到用户的数据,反之亦然,期望通过角色 admin 的用户可以看到所有内容?

我是否在 session 中的每个方法 User Id 与传递给 api 的 user_id 参数相等之前检查?有没有更好的办法?

ps:我通过spring security使用JWT。

最佳答案

在任何 @Controller , @RestController您可以使用带注释的 bean Principal直接作为方法参数。

    @RequestMapping("/users/{user_id}")
public String getUserInfo(@PathVariable("user_id") Long userId, Principal principal){
// test if userId is current principal or principal is an ADMIN
....
}

如果您不想在 Controller 中进行安全检查您可以使用 Spring EL 表达式。
您可能已经使用了一些内置表达式,例如 hasRole([role]) .

您可以编写自己的表达式。
  • 创建一个 bean

  •     @Component("userSecurity")
    public class UserSecurity {
    public boolean hasUserId(Authentication authentication, Long userId) {
    // do your check(s) here
    }
    }
  • 用你的表情

  •     http
    .authorizeRequests()
    .antMatchers("/user/{userId}/**")
    .access("@userSecurity.hasUserId(authentication,#userId)")
    ...

    好消息是您还可以组合以下表达式:

        hasRole('admin') or @userSecurity.hasUserId(authentication,#userId)

    关于spring - 如何在 Spring Boot/Spring Security 中允许用户只访问他们自己的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51712724/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com