问题标签 [spring-security-acl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何实现自定义弹簧安全acl?
我正在使用 Spring 开发应用程序。在访问控制访问部分,我想使用 Spring Security Acl(我是 Acl 的新手)。我想基于 2 点在我的应用程序中实现 ACL:
- 应用程序应具有五个权限,
read
、create
、和。modify
delete
Administrator
- 权限是层次结构的,当用户有权
create
限时,它应该能够read
,或者当它有权modify
限时,它应该能够read
,create
等等modify
。
可能吗?如何?
更新:
我的应用程序基于 Spring MVC RESTFUL。当用户想要修改自己的信息时,他会通过 Ajax 发送一些 json 数据。json数据示例如下:
现在,恶意用户可以登录到自己的帐户。该用户可以modify
像所有其他用户一样使用其数据。在他发送数据之前,更改他的 id 和modify
另一个帐户用户信息。我想使用 ACL 来防止这种颠覆性工作。并且用户可以访问其他人可以修改他的信息的其他人。
spring - 如何使用 Spring Security ACL 实现树节点?
我正在使用 spring 4.0.6 和 Hibernate 4.2.21 开发一个应用程序。我有一个实体如下:
换句话说,A
实体是一棵树。现在我想保护树的所有节点。考虑以下树:
我保护节点如下:
Node-1
此代码保护第一级( ,Node-2
& Node-3
)中的节点。现在我们想要read
在Node-1
, Node-1.1
&Node-1-2
节点中获得用户访问权限。我们如何实现它?
spring-mvc - Why @PostFilter don't work sometimes in Spring Security service?
I'm using spring security in my project. I have a service as follow:
In Implementation method1()
I use method2()
, But PostFilter
in method2()
don't work in this state.
Why?
java - 如何在集合中使用 Spring Security @Pre 和 @Post 注释
我们正在使用 Spring Security 的 ACL Annotations 来允许访问某些 Web 服务。@PreAuthorize
并且@PostAuthorize
似乎非常有用,并且有利于我们拥有的大多数用例。基于 SPEL 的单个方法等规则正在帮助我们在应用程序及其服务上实现细粒度的安全性。
例如:- 我们检查返回对象的所有者,如下所示
当返回单个对象时,这可以正常工作。如果返回一个 List 会是什么等价物?我们如何遍历一个集合并使用 SPEL 检查该集合中的各个元素属性?
java - Spring Security ACL 层次结构
我曾使用过基于 Spring Security Role 的安全性,但对 Spring Security ACL 还是陌生的。我需要使用 Spring 安全性在对象层次结构上实现 ACL。就像我的公司有不同的分支机构,每个分支机构都有多个部门,这些部门可以有多个部门。
现在公司管理员应该可以访问该公司的所有数据。将有分部管理员、部门管理员和部门管理员。分支管理员将有权访问每个部门和后续部分的数据。也可能有一个“分支”管理员可以访问多个分支。
我的应用程序堆栈是 Spring 4、Spring security 4、Hibernate 5 和带有 Primefaces 5.3 的 JSF2。
我无法搜索示例并想出了这将对我的数据库设计产生哪些变化以及我应该如何配置 Spring Security ACL 的想法。请参考示例或指南。
java - Spring security @PostAuthorize 注释有时无法正常工作
我正在使用 Spring Security 4.1.0来保护我的 java web 应用程序的安全性。我@PostAuthorize
对方法使用注释get
如下:
接口:
get
实现方法如下:
在web.xml
我设置 sessionConfig 如下:
用户登录到应用程序和调用get
方法。用户在 3 分钟后没有向服务器发送请求。get
他向 cal方法发送另一个请求。响应是403 Access Denied
,在此用户立即发送另一个相同的请求后,但响应是200 OK
。请参阅此请求:
403
响应:
Tomcat控制台登录2种情况如下:
有什么问题?
这是一个spring security
错误吗?
java - ACL 主体与 GrantedAuthority 概念
我正在阅读有关 Spring Security ACL lib 的信息,但我对某些概念感到有些困惑。关于 SID,它让我感到困惑:
ACL_SID 允许我们唯一标识系统中的任何主体或权限(“SID”代表“安全身份”)。唯一的列是 ID、SID 的文本表示和指示文本表示是指代一个prncipal name 还是一个 GrantedAuthority 的标志。
那么校长和角色一样吗?GrantedAuthority 是一个平等的概念还是一个特定的角色?boolean field principal
= true 是否意味着标识符具有语义值或只是它是系统中的一个角色?如果是这样,为什么要存储系统中未计入的 SID?
java - Spring Security ACL 自定义对主题的默认访问
使用 spring ACL,我可以为主题上的某些操作配置权限。我的应用程序很少需要自定义主题的访问权限。所以我不想为默认依赖填充 ACL,但如果 ACL 为空则需要特殊指令。
例如,我们有
默认情况下, user1应该可以访问branch1中的所有文档(如果 ACL 为空)。用户 2 -> 分支 2。有时 user1 需要特殊访问权限。他需要访问branch2.doc3并且他应该对branch1.doc2有限制!
如果我尝试使用 ACL 建议以类似的方式实施解决方案,我需要为每个用户添加相应分支中每个文档的权限。由于规范化 && 许可,这种方式非常难看。所以我想实现解决方案,其中 ACL 逻辑仅用于交叉引用,默认权限允许任何用户访问同一分支中的每个文档......
默认情况下,我可以使用诸如@PostAuthorize或@PreAuthorize 之类的方法注释以及诸如hasRole、hasPermission之类的检查,但我无法建立权限限制强于角色的条件,或者基于关系用户分支对请求应用过滤器。
我知道这个想法应该可以实现,但是我没有找到相应的描述或技巧示例如何实现它......
spring-security - 在 Spring Data 存储库中包含域对象安全 @PostFilter 可分页端点
在我的项目中,我使用 Spring-Data、Spring-Data-Rest 和 Spring-Security。
我需要完成的是在这些存储库上实现域对象安全 (ACL)。特别@PostFilter
是Pageable.findAll()
方法。
方法级别的安全性很容易实现,如此处所述。
文档中还有一个关于在@Query
此处使用安全表达式的部分。
但是虽然我也可以hasPermission(..)
在里面使用方法@Query
,但是没有办法在这个方法中包含对象(SQL 行)——具体来说是这样做的:
现在我明白这与像这样修改查询预执行不同:
我还发现了以下 jira 问题: https ://jira.spring.io/browse/DATACMNS-293 我怀疑一旦它得到解决,就会有解决方案,但似乎不会很快。
我仍然需要实现这个功能,为此我想得到你的意见和可能的解决方案的指示。
现在我正在考虑创建我的自定义注释,它将模仿@PostFilter
一个并使用相同的语法,但将在我自己的 BaseRepositoryImplementation 中手动调用。在那里,我将从 type 和 获取存储库接口Repositories#getRepositoryInformationFor(type)#getRepositoryInterface()
,找到相应方法的注释并手动调用安全检查。
您是否有不同的解决方案,或者对我提出的解决方案有一些说明?
另外,您是否知道提到的 jira 问题是否有任何时间表?
java - 当我的域标识符是字符串类型时如何使用 Spring Security ACL?
尝试使用MutableAclService.createAcl(ObjectIdentity objectIdentity)
.
问题是ObjectIdentity
使用Serializable
类型作为标识符。同时,我的域String
为此目的使用类型。id 是这样生成的:
然后我尝试使用以下结构添加 ACL:
之后我得到以下异常:
java.lang.NumberFormatException:对于输入字符串:“ad169805-a2d1-4324-ba11-c98cc679e594”
我发现 Spring Security ACL 使用Long
类型作为标识符。
所以,问题是:
- 在这种情况下,最佳实践是什么(我是否需要使用,例如,我的对象的哈希码作为标识符,或者其他)?
- 为什么
Serializable
处处提到,而实际上却一定是长篇大论?
PS 标识符的 SQL 数据类型也是数字 - bigserial。