1

我面临的问题与授权有关,

  1. 我以这种方式将应用程序的角色授予用户: BasicModel.grantRole(relationshipManager, identity.getAccount(), role);

但是当我使用 hasRole(this.relationshipManager, this.identity.getAccount(), role); 似乎总是返回 true,即使我授予另一个角色,例如。我授予 ROLEA 角色,当我要求 ROLEB 时,它返回 true。我在 PL 快速入门中找到的 grantRole 方法不被编译器识别,但它可以识别 hasRole。

  1. 授权注释似乎不起作用,允许未登录的用户调用该方法,当然还允许具有任何角色的用户调用该方法

@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>		

4

2 回答 2

0

这可能不是最终答案,只是不适合评论。

一种激进的方法是手动调试整个事情。不过,稍微不那么令人兴奋的方法是查看数据库内容。你没有提到你的数据库类型,但是有很多工具可以检查周围的数据库内容。使用其中之一:

  1. 转到 user_type_entity 表(可能没有 unsercores)并记下用户 ID。

  2. 转到 role_type_entity 表并检查您的角色名称,每个只有一行。请注意角色的 ID。

  3. 转到relationship_identity_type_entity 表并查看具有相同owner_id 的角色/受让人对(owner_id 可能指向relationship_type_entity 表中的某个Grant 类型,但我们现在不需要检查它)。

数据库表快照

所以,关键问题是:您那里是否为您的用户分配了不受欢迎的角色?如果是这样,您的函数完全按照它应该做的事情去做,并且您需要更仔细地查看您的代码,看看您是否在某个地方意外地授予了这个东西。

如果您的用户未列为角色的受让人,但 hasRole 返回 true ... 那么您可能对 Picketlink 本身有问题,并且可能需要对函数进行调试。

于 2015-04-23T21:17:45.573 回答
0

我检查了数据库寄存器,发现我正在将所有角色分配给用户。我还使用 HttpSecutiryConfiguration 来解决授权问题。

于 2015-05-12T15:04:06.300 回答