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

我正在使用JDBC Realm并在SQL中存储身份validation数据。 我将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; } } 

我的理解是,目前(Shiro 1.2)您无法在shiro.ini中配置ENUM值,请参阅此内容 。
但是,您可以在调用领域相关方法(如登录)的Java代码中执行此操作。 我在我的servlet init()中做了如下:

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

您可以扩展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