5

我正在使用 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;
    }
}
4

3 回答 3

2

我的理解是目前(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<Realm> realms=((RealmSecurityManager) securityManager).getRealms();    
          CustomJdbcRealm jdbcRealm=(CustomJdbcRealm)realms.toArray()[0];
          jdbcRealm.setSaltStyle(saltStyle);
   }
于 2013-03-22T16:21:36.460 回答
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
于 2014-12-16T21:18:44.883 回答
0

该请求已修复。我可以使用

[main]
jdbcRealm.saltStyle = COLUMN

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

于 2020-06-18T07:23:38.130 回答