Permissions Apache Shiro,isPermitt()不起作用

Permissions Apache Shiro,isPermitt()不起作用,permissions,shiro,Permissions,Shiro,我正在使用ApacheShiro进行一些测试,只是为了学习,我的权限有问题。这个方法不起作用,我的意思是,它总是返回false 西罗·伊尼 [main] sha256Matcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher sha256Matcher.hashAlgorithmName=SHA-256 authc.loginUrl = /faces/views/login.xhtml authc.success

我正在使用ApacheShiro进行一些测试,只是为了学习,我的权限有问题。这个方法不起作用,我的意思是,它总是返回false

西罗·伊尼

[main]

sha256Matcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher
sha256Matcher.hashAlgorithmName=SHA-256


authc.loginUrl = /faces/views/login.xhtml
authc.successUrl = /faces/views/index.xhtml

builtInCacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
securityManager.cacheManager = $builtInCacheManager

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true 
jdbcRealm.authenticationQuery = select senha from VUsuarioPerfil where usuario = ?
jdbcRealm.userRolesQuery = select perfil from VUsuarioPerfil where usuario = ?
jdbcRealm.permissionsQuery = select permissoes from VUsuarioPerfil where usuario = ?

jdbcRealm.credentialsMatcher = $sha256Matcher

ds = com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource
ds.serverName = 192.168.50.254
ds.user = xx
ds.password = xxx
ds.databaseName = shiro
jdbcRealm.dataSource = $ds
每个用户都应该有自己的权限,因此在viewVUsuarioPerfil上有一个名为permissoes的列,我在其中放置了一个字符串,如clientes:visualizar。 我用这种方法测试代码

public void test() {
    System.out.println(SecurityUtils.getSubject().hasRole("usuario"));
    System.out.println(SecurityUtils.getSubject().isPermitted("clientes:visualizar"));
}
结果是输出:

true
false

我现在不知道为什么数据库中没有捕获权限。

查看您的属性:

select permissoes from VUsuarioPerfil

您需要更正权限

签出您的属性:

select permissoes from VUsuarioPerfil

您需要更正权限

在JDBC领域中,权限查询不应映射用户->角色,而应映射角色->权限

因此,本质上,被调用的查询是:

select permissoes from VUsuarioPerfil where usuario = usuario
而且,正如你所预料的,它不会返回任何结果。因此,角色没有权限,用户没有权限

考虑默认权限查询可能会帮助您考虑如何将查询映射到数据结构

select permission from roles_permissions where role_name = ?

在JDBC领域中,权限查询不需要映射用户->角色,而是映射角色->权限

因此,本质上,被调用的查询是:

select permissoes from VUsuarioPerfil where usuario = usuario
而且,正如你所预料的,它不会返回任何结果。因此,角色没有权限,用户没有权限

考虑默认权限查询可能会帮助您考虑如何将查询映射到数据结构

select permission from roles_permissions where role_name = ?

好的,没关系,你可以在表中保留你喜欢的任何字段名好的,没关系,你可以在表中保留你喜欢的任何字段名