java - Picketlink 授权注释不起作用

标签 java authorization picketlink

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

  1. 我通过以下方式向用户授予应用程序的角色: 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>		

    最佳答案

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

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

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

    2. 转到 role_type_entity 表并检查其中是否存在您的角色名称,每个角色名称只有一行。记下角色的 ID。

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

    db table snapshot

    所以,关键问题是:您是否为您的用户分配了不需要的角色?如果是这样,您的函数将完全执行其应该执行的操作,并且您需要更仔细地查看您的代码,看看您是否在某个地方意外地授予了该功能。

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

    关于java - Picketlink 授权注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29703804/

    相关文章:

    java - Hibernate 中不存在表或 View

    java - driver.close() 关闭子窗口后切换到父窗口抛出异常

    android - 使用 Android SDK 的 Spotify 长期登录

    java - 适用于多个应用程序的 PicketLink 单个实例

    gradle - WildFly 18.0.1.Final-提取WildFly组件 'org.picketlink:picketlink-api:::2.5.5.SP12-redhat-00006'时出错

    java - 两个网络浏览器窗口之间的通信

    Java 套接字服务器客户端场景

    rest - 我可以将什么用作 XACML PDP?

    javascript - 针对用户角色的不同 React Webpack JS 包

    authentication - Picketlink 没有选择我的用户定义的验证器