2013-02-14 98 views
3

我正在使用JDBC Realm並將身份驗證數據存儲在SQL中。我將salt存儲在users表中並依靠DEFAULT_SALTED_AUTHENICATION_QUERY。要調用該查詢,我必須設置SaltStyle。將值傳遞給Shiro ini中的枚舉屬性

因此,我需要通過INI將SaltStyle.COLUMN枚舉值傳遞給JdbcRealm。

SaltStyle不是類,所以我不能創建一個引用

無論我做什麼過程生成該錯誤= org.apache.shiro.config.UnresolveableReferenceException:

從exstensive搜索

找不到實例或參考文件。任何幫助深表感謝。

#==================================================================== 
# Shiro INI configuration 
# 
# =================================================================== 
[main] 
JdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm 
JdbcRealm.permissionsLookupEnabled = true 
sha256Matcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher 
sha256Matcher.hashAlgorithmName=SHA-256 
sha256Matcher.hashIterations=1 
JdbcRealm.credentialsMatcher = $sha256Matcher 
JdbcRealm.saltStyle= enum expression needed here 

這裏是JdbcRealm

public void setSaltStyle(SaltStyle saltStyle) { 
    this.saltStyle = saltStyle; 
    if (saltStyle == SaltStyle.COLUMN && authenticationQuery.equals 
      (DEFAULT_AUTHENTICATION_QUERY)) { 
     authenticationQuery = DEFAULT_SALTED_AUTHENTICATION_QUERY; 
    } 
} 

回答

2

物業我的理解是,目前(四郎1.2),你不能在shiro.ini配置枚舉值,見this
但是,您可以在您調用realm相關方法(如登錄)的java代碼中執行此操作。我做到了我的servlet的init()如下:

public class AuthManager extends HttpServlet { 
protected SaltStyle saltStyle = SaltStyle.COLUMN; 
// set remaining fields... 
    public void init() throws ServletException { 
      Collection<Realm> realms=((RealmSecurityManager) securityManager).getRealms();  
      CustomJdbcRealm jdbcRealm=(CustomJdbcRealm)realms.toArray()[0]; 
      jdbcRealm.setSaltStyle(saltStyle); 
    } 
-1

您可以延長JdbcRealm和覆蓋的方法:

- CustomShiroJdbcRealm.java:

public class CustomShiroJdbcRealm extends JdbcRealm { 

    public void setSaltStyle(String saltStyle) { 
     super.setSaltStyle(SaltStyle.valueOf(saltStyle)); 
    } 

} 

- - shiro.ini:

jdbcRealm = com.mycompany.CustomShiroJdbcRealm 
jdbcRealm.saltStyle = COLUMN