【问题标题】:How to get roles from principal in Apache Shiro?如何从 Apache Shiro 中的主体获取角色?
【发布时间】:2018-02-12 09:35:18
【问题描述】:

我有点卡在这里。

在 jdbcRealm 中使用一个非常简单的 Shiro 配置:

[main]
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
securityManager.cacheManager = $cacheManager

# Create JDBC realm.
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm

# Configure JDBC realm datasource.
ds = org.postgresql.ds.PGSimpleDataSource
ds.databaseName = pg_sensor
***
jdbcRealm.dataSource = $ds

# Configure JDBC realm SQL queries.
jdbcRealm.authenticationQuery = SELECT pass FROM users WHERE name = ?
# user id is a user Role )
jdbcRealm.userRolesQuery = SELECT id FROM users WHERE name = ?

所以,我使用userid 作为角色在代码中进行授权。 在一种情况下,我需要获取角色名称才能继续。

任何人都可以通过Principal (SecurityUtils.getSubject().getPrincipal()) 建议如何做到这一点吗?

我想我们需要使用 getRoles()SimpleAccount 类,但无法将其与 Principal 连接。

【问题讨论】:

    标签: authorization shiro


    【解决方案1】:

    首先,对您的 shiro.ini 发表一些评论:

    角色查询

    首先,您的jdbcRealm.userRolesQuery 没有真正意义:您应该获取角色而不是此查询的用户。

    假设你有桌子

    CREATE TABLE user{
        id          INTEGER,
        username    VARCHAR,
        password    VARCHAR
    }
    
    CREATE TABLE user_role{
        id          INTEGER,
        role_name   VARCHAR,
        username    VARCHAR
    }
    

    您的查询希望:

    # Configure JDBC realm SQL queries.
    jdbcRealm.authenticationQuery = SELECT password FROM user WHERE username = ?
    # user id is a user Role )
    jdbcRealm.userRolesQuery = SELECT role_name FROM user_role WHERE username = ?
    

    校长

    我假设您的主题已成功通过身份验证。到目前为止,SecurityUtils.getSubject().getPrincipal() 只会返回 loginusername,任何可以识别您的用户的信息,仅此而已。在我上面的示例中,它将返回存储在username 列中的值。

    角色检查

    我认为,您正在寻找这个经过身份验证的用户是否具有角色“MyRole”?。在这种情况下,您可以查看SecurityUtils.getSubject().hasRole("MyRole")。据我所知,没有办法列出一个主题当前拥有的所有角色。您只能检查主题是否具有这样或那样的角色

    如果我误解了您的问题,请随时发表评论

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-27
      • 2013-06-28
      • 2011-11-26
      • 2016-03-12
      • 2018-09-14
      • 1970-01-01
      • 2017-09-28
      • 2013-09-14
      相关资源
      最近更新 更多