Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring安全性时,条件特权实现是什么样子的?_Java_Spring_Spring Mvc_Spring Security_Permissions - Fatal编程技术网

Java 使用Spring安全性时,条件特权实现是什么样子的?

Java 使用Spring安全性时,条件特权实现是什么样子的?,java,spring,spring-mvc,spring-security,permissions,Java,Spring,Spring Mvc,Spring Security,Permissions,我所说的“有条件”特权的意思是,例如:假设我们有事件e。创建事件e的用户应该能够删除事件e并邀请其他用户访问事件e,但只能邀请该用户 从我看到的教程中,权限和角色似乎是静态的,例如: 医生有一个角色医生,拥有x、y和z权限,但就是这样……相当静态 有没有一种简单的方法可以使用Spring Security有条件地管理权限 或者这是更适合前端的产品吗?例如,仅当特定事件的资源数据确认事件创建者的ID实际上与当前登录用户的会话内存/密钥链/任何类型中存储的ID相同时,视图才会显示“删除事件”按钮 首

我所说的“有条件”特权的意思是,例如:假设我们有事件e。创建事件e的用户应该能够删除事件e并邀请其他用户访问事件e,但只能邀请该用户

从我看到的教程中,权限和角色似乎是静态的,例如: 医生有一个角色医生,拥有x、y和z权限,但就是这样……相当静态

有没有一种简单的方法可以使用Spring Security有条件地管理权限

或者这是更适合前端的产品吗?例如,仅当特定事件的资源数据确认事件创建者的ID实际上与当前登录用户的会话内存/密钥链/任何类型中存储的ID相同时,视图才会显示“删除事件”按钮

首先,谢谢

或者这是更适合前端的产品吗? …仅在以下情况下显示“删除事件”按钮

不,不是作为可靠的防线,不

这可能取决于技术堆栈、架构等,但根据经验,你不应该这样做。我没有编写servlets/jsp,但我在富客户机(swing)应用程序中使用了spring安全性,尽管我们拥有所有的控制权(我的意思是,我们可以保证用户只能通过单击按钮来访问某些功能),但我们保护了我们的模型,而不是gui

您不应该能够调用
实体#delete
,无论您如何调用它-通过按钮单击事件或在测试中直接调用它。对于web应用程序,假设您不显示按钮,但攻击者知道该按钮会导致
example.com/entity?action=delete
URL或类似的内容,即使您不渲染按钮,他也可以直接访问该按钮

关于主要问题,spring安全性大致分为两部分:RBAC和ACL。您需要的似乎是ACL部分。阅读一些howto和关于它的文章,这是一个相当复杂的东西,但它肯定能满足你的需要(当然,需要一些努力)。您在第一段中描述的内容可能很容易实现,因为每个对象都有其所有者,并且可以被利用


编辑:只是为了给未来的访客澄清一下。要点是:前端应该有一些逻辑,但它不能是唯一的安全逻辑。当然,没有必要在UI中添加导致无法访问的函数的按钮。

类似于执行删除操作的方法上的
@PreAuthorize(#event.owner==principal.username)
。或者通过使用SpringSecurity的ACL特性。哦,酷,有什么理由在事件之前就有标签吗?或者你是从哪里得到这些信息的,这样我就可以读到。谢谢虽然公认的答案暗示了基于ACL的方法,但实现起来很复杂。使用端点上的动态表达式(web安全表达式)或应用方法级安全性,可以更轻松地实现这一点@TylerDurden如何编写表达式在参考指南中有详细说明。没错,你没有必要是正确的,但例如,如果你在Twitter上有一条推文,并且你正在查看它,那么视图必须有一些逻辑来显示一个按钮或他们使用的任何UI,以便删除该推文。只有当您是Tweet的作者时,此UI才会显示,如果不是,它将不可见。