将值传递给Shiro ini中的枚举属性

时间:2013-02-14 14:53:36

标签: java ini shiro

我正在使用JDBC Realm并在SQL中存储身份验证数据。我将salt存储在users表中并依赖于DEFAULT_SALTED_AUTHENICATION_QUERY。要调用该查询,我必须设置SaltStyle。

因此,我需要通过INI将SaltStyle.COLUMN枚举值传递给JdbcRealm。

SaltStyle不是一个类,因此我无法创建引用

无论我做什么传递都会产生此错误= org.apache.shiro.config.UnresolveableReferenceException:

无法从文档中的详尽搜索或参考中找到示例。非常感谢任何帮助。

#====================================================================
# 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;
    }
}

3 个答案:

答案 0 :(得分:2)

我的理解是,目前(Shiro 1.2)您无法在shiro.ini中配置ENUM值,请参阅this
但是,您可以在调用领域相关方法(如登录)的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 :(得分:0)

该请求已得到解决。我可以使用

[main]
jdbcRealm.saltStyle = COLUMN

在我的shiro.ini配置文件中。

答案 2 :(得分:-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