5

JDBC Realm を使用しており、認証データを SQL に保存しています。ユーザー テーブルにソルトを格納し、DEFAULT_SALTED_AUTHENICATION_QUERY に依存しています。そのクエリを呼び出すには、SaltStyle を設定する必要があります。

したがって、SaltStyle.COLUMN 列挙値を INI を介して 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 コードで実行できます。次のように、サーブレット 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 に答える