使用弹簧安全授权对象?

Posted

技术标签:

【中文标题】使用弹簧安全授权对象?【英文标题】:Authorize Object using spring security? 【发布时间】:2017-07-21 01:52:35 【问题描述】:

我有一个有两个域模型的应用程序 组织和票务问题。 经过身份验证的用户想要创建具有组织属性的票证来解决该问题 每个用户都允许这样的组织:

User1 对 Organization1 的许可

User2 允许 Organization2

TicketController.java 有创建票的保存方法。 我有这个漏洞:User1 可以使用具有 Organization2 的票证调用方法(没有权限)。 我正在使用 Hibernate 过滤器对 GET 方法中的数据进行授权,但我不知道如何保护用户想要持久且没有权限的数据??;

/ticket/save  


   id:-1,
   organization:
    id:2,
    title:'organization2' //not allowed this organization
   



@Entity
@Table(name = "core_organization_structure")
public class OrganizationStructure 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "title", nullable = false)
    private String title;


@Entity
@Table(name = "core_Ticket")
public class Ticket  


    ..some prop

    @ManyToOne
    @JoinColumn(name = "org_id", nullable = false)
    private OrganizationStructure org;

【问题讨论】:

【参考方案1】:

提交表单时,您需要加载经过身份验证的用户的权限,并检查他们是否有权执行他们尝试执行的操作。

如果用户尝试为他们无权访问的组织创建票证;不要持久化记录,并妥善处理。 (抛出异常,返回 401 等...)

【讨论】:

是的,基本解决方案之一是 .想象一下我有一个域模型,它有 10 个属性都有这个问题。我为每个属性编写加载代码?!另一个问题:我有添加更新和删除方法,并且可能有超过这 3 种方法,另一个问题是,如果在 100 个域模型中使用的组织编写此检查代码 100 次,我想在我的服务之外解决问题。跨度>

以上是关于使用弹簧安全授权对象?的主要内容,如果未能解决你的问题,请参考以下文章

我应该使用基于 Spring 安全角色的授权还是 Angular Route Guards 或两者兼而有之? [关闭]

无法使用 ldap 获得具有弹簧安全性的权限

Spring OAuth2 多服务器注解配置(资源&授权)

使用oauth2的Spring安全性向授权URL添加其他参数?

仅使用 Spring-Security(或)Spring 进行授权

spring-boot 弹簧安全 angularjs