2016-05-07 1 views
0

私はJBoss 7.1.1とJavaEE 6を使用しています。 パスワードは暗号化された形式でSQLデータベースに格納されます(例: "admin"ではなく "X8oyfUbUbfqE9IWvAW1/3")。しかし、「admin」パスワードでサインインしようとすると、毎回拒否されます。サーバーには「X8oyfUbUbfqE9IWvAW1/3」が必要です。jboss 7はセキュリティドメインオプションを無視し、暗号化された形式のパスワードを要求します

は、私は私のスタンドアロン・full.xmlで次のオプションを使用しています:(私は-cスタンドアロン-full.xmlでサーバを起動)

<module-option name="hashAlgorithm" value="MD5"/> <module-option name="hashEncoding" value="BASE64"/> <module-option name="hashUserPassword" value="true"/> <module-option name="hashStorePassword" value="true"/>

+0

これが役立つことがあります。[JBossの設定方法Webアプリケーションにおけるダイジェスト認証のためのDatabaseServerLoginModule](http://stackoverflow.com/questions/3078048/how-to-configure-jboss-databaseserverloginmodule-for-digest-authentication-in-a) –

答えて

0

いくつかの時間後、私は最終的に解決策を見つけました:カスタムログインモジュール。それは短く、シンプルなだけではありませんが、使用するハッシュアルゴリズムの幅広い選択肢を提供しています:

public class MyLoginModule extends DatabaseServerLoginModule { 

    private static final Logger LOGGER = Logger.getLogger(MyLoginModule.class); 
    @Override 
    protected boolean validatePassword(String inputPassword, String expectedPassword) { 

    MessageDigest md = null; 
    try { 
     md = MessageDigest.getInstance("MD5"); 
    } catch (NoSuchAlgorithmException e) { 
     LOGGER.error(e.getMessage()); 
    } 
    byte[] passwordBytes = inputPassword.getBytes(); 
    byte[] hash = md.digest(passwordBytes); 
    String passwordHash = 
      org.jboss.security.Base64Utils.tob64(hash); 
    LOGGER.info(expectedPassword.equals(passwordHash)); 
    return expectedPassword.equals(passwordHash); 
    } 
} 

と私standalone.xmlからの抜粋:

<login-module code="other.MyLoginModule" flag="required"> 
     <module-option name="dsJndiName" value="java:/MySqlDS"/> 
     <module-option name="principalsQuery" value="select passwd from USERS where login=?"/> 
     <module-option name="rolesQuery" value="select role,'Roles' from USER_ROLES where login=?"/> 
</login-module> 
関連する問題