我正在使用 JDBC 领域并将身份验证数据存储在 SQL 中。我将盐存储在用户表中并依赖于 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 值,参见 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);
}
关于java - 将值传递给 Shiro ini 中的枚举属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14877518/