当前位置: 首页 > 知识库问答 >
问题:

Spring Security-进一步限制方法

卞博简
2023-03-14

我有一个应用程序正在使用Spring Security性授权OAuth2令牌。使用@PreAuthorize标记,我可以轻松确保用户在允许他们访问方法之前拥有权限:

@PreAuthorize("#oauth2.hasScope('account.read')")
public void getAccount(int accountId);
{
    //return account
}

这对于限制没有帐户的用户非常有效。访问此方法的读取权限。

唯一的问题是,现在任何具有此权限的用户都可以访问任何帐户。我想限制用户只访问自己的帐户。我相信这是一种常见的情况。其他应用程序如何处理此问题?

共有1个答案

卜季萌
2023-03-14

所以,这里的问题——系统如何知道帐户是否属于用户?答案是您可能正在存储用户

@PreAuthorize("#oauth2.hasScope('account.read')")
public Account getAccount(int accountId) {   
    // get account from db
    Account account = repository.findById(accountId);
    // you will need a little helper to get your User from 
    //Spring SecurityContextHolder or whatever there for oauth2
    User user = securityManager.getCurrentUser(); 
    if (account.belongs(user)) {
        return account;
    } else {
        throw new UnathorizedException("User is not authorized to view account");
    }
}

Upd。可能的改进之一可能是首先获取用户,从中获取id并创建存储库。findByIdAndUserId(accountId,userId)或类似的东西。(甚至是repositoryFindByIdAndUser(accountId,user))

 类似资料:
  • 本文向大家介绍SpringBoot + SpringSecurity 环境搭建的步骤,包括了SpringBoot + SpringSecurity 环境搭建的步骤的使用技巧和注意事项,需要的朋友参考一下 一、使用SpringBoot+Maven搭建一个多模块项目(可以参考这篇文章 --> 这里) 二、删除父工程的src文件,删除app、browser、core下的.java文件 依赖关系: dem

  • 我们希望,之前的章节对于如何构建一个 Meteor 应用,给了你一个良好的概述。但是,现在还要去哪里学习呢? 额外章节 首先,如果你还没有购买本书的话,可以购买 Full 或 Premium 版本来阅读本书额外的章节。这些章节将引导你深入真实场景,比如为应用建立 API,与第三方服务集成并迁移数据。 Meteor 手册 除了官方 文档,Meteor 手册 挖掘了更深度的特定主题,比如 Tracke

  • 问题内容: 我四处搜索,据我所知,POST表单请求已经限制为10MB(http://golang.org/src/net/http/request.go#L721)。 如果要减少这种方法的使用量,则不确定如何正确执行此操作。我会尝试这样的事情: 但是错误返回是否也会关闭连接?我如何避免必须阅读所有内容?我发现了这一点,但是如果未设置内容长度,并且在阅读过程中我意识到文件太大,该怎么办。 我将此用作

  • SQLAlchemy 1.4 / 2.0 Tutorial 此页是 SQLAlchemy 1.4/2.0教程 . 上一页: 使用相关对象 进一步阅读 下面的部分是主要的顶层部分,它们将更详细地讨论本教程中的概念,并描述每个子系统的更多特性。 核心基本参考 使用引擎和接头 模式定义语言 SQL语句和表达式API 列和数据类型 ORM基本参考 映射器配置 关系配置 使用会话 查询数据,加载对象

  • 我已经在网上搜索了,我发现所有的都是使用DecimalFormat并尝试了它,但当我在Android Studio上编码时,出现了一条消息,说必须使用API24来执行这种命令。API24有错误和所有的网站,我看,建议使用API23。 因此,我需要一种方法来显示双数字,只有两个十进制数字在我的AlertDialog。

  • 3.7. 进一步学习 开始阅读 Go语言入门 教程。 参考 Wiki Codelab 编写一个web程序。 阅读 Effective Go 阅读 Go语言文档