我正在做一些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
我不知道現在爲什麼只允許未在數據庫捕獲。
好吧,沒關係,你可以在你的表格中保留你喜歡的任何字段名稱 – Anshu