Picketlink授权注释不起作用

时间:2015-04-17 15:45:49

标签: java authorization picketlink

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

  1. 我以这种方式向用户授予应用程序的角色: BasicModel.grantRole(relationshipManager,identity.getAccount(),role);
  2. 但是当我使用时 hasRole(this.relationshipManager,this.identity.getAccount(),role); 似乎总是回归,即使我授予另一个角色,例如。我授予ROLEA角色,当我要求ROLEB时,它返回true。我在PL快速入门中找到的grantRole方法不会被编译器识别,但它会识别出hasRole。

    1. 授权注释似乎无效,允许未登录的用户调用该方法,当然也允许具有任何角色的用户调用该方法
    2. @LoggedIn
      @RolesAllowed({"borrower"})

      否则似乎PL运行良好,具有autenthication和identityManager。我的环境是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>		

2 个答案:

答案 0 :(得分:0)

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

一种激进的方法是手动调试整个事物。然而,略微不那么令人兴奋的方法是查看数据库内容。您没有提到您的数据库类型,但有很多工具可用于检查数据库内容。使用其中一个:

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

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

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

    < / LI>

    db table snapshot

    因此,关键问题是:您是否在那里为您的用户分配了不受欢迎的角色?如果是这样,你的函数完全按照它应该做的去做,你需要更仔细地查看你的代码,看看你是否在某处意外地批准了这个东西。

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

答案 1 :(得分:0)

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