我面临的问题与授权有关,
- 我通过以下方式向用户授予应用程序的角色: BasicModel.grantRole(relationshipManager,identity.getAccount(),角色);
但是当我使用 hasRole(this.relationshipManager, this.identity.getAccount(), 角色); 似乎总是返回 true,即使我授予另一个角色,例如。我授予了 ROLEA 角色,当我请求 ROLEB 时,它返回 true。我在 PL 快速入门中找到的 grantRole 方法无法被编译器识别,但 hasRole 可以被编译器识别。
- 授权注解好像不起作用,允许未登录的用户调用该方法,当然也允许任何角色的用户调用该方法
@LoggedIn
@RolesAllowed({"borrower"})
否则,PL 似乎运行良好,具有身份验证和身份管理器。我的环境是 WildFly 8.2 和 PK 2.7.Final、JPA。这些是我从基本模型映射的类:
<class>org.picketlink.idm.jpa.model.sample.simple.AttributedTypeEntity</class>
<class>org.picketlink.idm.jpa.model.sample.simple.RoleTypeEntity</class>
<class>org.picketlink.idm.jpa.model.sample.simple.IdentityTypeEntity</class>
<class>org.picketlink.idm.jpa.model.sample.simple.RelationshipTypeEntity</class<
<class>org.picketlink.idm.jpa.model.sample.simple.RelationshipIdentityTypeEntity</class>
<class>org.picketlink.idm.jpa.model.sample.simple.PartitionTypeEntity</class>
<class>org.picketlink.idm.jpa.model.sample.simple.AttributeTypeEntity</class>
最佳答案
这可能不是最终答案,只是不适合评论。
一种根本的方法是手动调试整个过程。不过,一种稍微不那么令人兴奋的方法是查看数据库内容。您没有提到您的数据库类型,但是有很多工具可以用于检查数据库内容。使用其中之一:
转到 user_type_entity 表(可能没有 unserscore)并记下用户 ID。
转到 role_type_entity 表并检查其中是否存在您的角色名称,每个角色名称只有一行。记下角色的 ID。
转到relationship_identity_type_entity表并查看具有相同owner_id的角色/受让人对(owner_id可能指向relationship_type_entity表中的某些授予类型,但我们现在不需要检查它)。
所以,关键问题是:您是否为您的用户分配了不需要的角色?如果是这样,您的函数将完全执行其应该执行的操作,并且您需要更仔细地查看您的代码,看看您是否在某个地方意外地授予了该功能。
如果您的用户没有被列为该角色的受让人,但 hasRole 返回 true ...那么,您的 Picketlink 本身可能有问题,并且可能需要对该功能进行调试。
关于java - Picketlink 授权注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703804/