Apache Shiro, isPermitted() не работает

Я делаю некоторые тесты с Apache Shiro только для изучения, и у меня проблема с разрешениями. Я имею в виду, что метод isPermitted() просто не работает, он всегда возвращает 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

У каждого пользователя должно быть свое собственное разрешение, поэтому в представлении (VUsuarioPerfil) есть столбец с именем permissoes, где я поместил строку, например «clientes:visualizar». И на коде я тестирую таким образом

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

Выводится результат:

true
false

Я не понимаю, почему просто разрешение не фиксируется в базе данных.


person LucasDeAbreu    schedule 26.09.2012    source источник


Ответы (2)


В области JDBC запрос разрешений не должен сопоставлять пользователей-> роли, ожидается, что он сопоставляет роли-> разрешения.

Таким образом, запрос, который вызывается, выглядит следующим образом:

select permissoes from VUsuarioPerfil where usuario = usuario

И, как и следовало ожидать, он ничего не возвращает. Следовательно, у роли нет разрешений, и у пользователя нет разрешений.

Возможно, рассмотрение запроса разрешений по умолчанию поможет вам подумать о том, как сопоставить запрос со структурой данных?

select permission from roles_permissions where role_name = ?
person jbunting    schedule 26.09.2012

Проверьте свою недвижимость:

select permissoes from VUsuarioPerfil

Вам нужно исправить разрешения

person Anshu    schedule 26.09.2012
comment
Хорошо, неважно, вы можете оставить в своей таблице любые имена полей, которые вы предпочитаете. - person Anshu; 26.09.2012