2012-09-26 35 views
2

我正在做一些Apache Shiro測試,只是爲了學習,並且我有權限問題。方法isPermitted()只是不工作我的意思是,它總是返回false。Apache Shiro,isPermitted()沒有工作

shiro.ini

[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 

我不知道現在爲什麼只允許未在數據庫捕獲。

回答

0

退房您的財產:

select permissoes from VUsuarioPerfil 

您需要更正權限

+0

好吧,沒關係,你可以在你的表格中保留你喜歡的任何字段名稱 – Anshu

3

在JDBC領域,預計不會權限查詢映射用戶 - >角色,則有望地圖roles->權限。

所以基本上,這是獲得所謂的查詢是:

select permissoes from VUsuarioPerfil where usuario = usuario 

而且,正如你所期望的,它沒有返回。因此該角色沒有權限,並且該用戶沒有權限。

也許考慮默認權限查詢將幫助您考慮如何將查詢映射到您的數據結構?

select permission from roles_permissions where role_name = ? 
+0

你是對的,我改變了,它現在正在工作。非常感謝! – LucasDeAbreu