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