2016-03-29 7 views
0

MD5(username + password)を含むデータベースにパスワードフィールドがあります。私はこれをSpring Security + JdbcAuthenticationにどのように実装しますか?私はこれがどんな手段でも安全ではないことを知っていますが、それは私が話す必要があるレガシーデータベースです。現在のコードは次のようになります。スプリングブートセキュリティ4カスタムPasswordEncoder

auth.jdbcAuthentication() 
    .dataSource(dataSource) 
    .usersByUsernameQuery("select login, password, 1 as enabled from 
          login where login=?") 
    .authoritiesByUsernameQuery("select login,role" + 
        " from login lo" + 
        " join login_role lor on lo.login_id = lor.login_id" + 
        " join role gr on lor.role_id = gr.role_id" + 
        " where login=?") 

パスワードとしてハッシュ値を送信すると、認証が機能します。私はいくつかのパスワードエンコーダを設定する必要があると思う。あなたは

@Autowired 
public void configAuthentication(AuthenticationManagerBuilder auth) 
    throws Exception { 

    auth.jdbcAuthentication().dataSource(dataSource) 
     .passwordEncoder(passwordEncoder()) 
     .usersByUsernameQuery("sql...") 
     .authoritiesByUsernameQuery("sql..."); 
} 

@Bean 
public PasswordEncoder passwordEncoder(){ 
    PasswordEncoder encoder = new BCryptPasswordEncoder(); 
    return encoder; 
} 

を次のように行う必要があります

+0

Springセキュリティのデフォルトインフラストラクチャの多くを使用するには、パスワードに追加する 'username'を取得するために' SaltSource'が必要です。次に、 'MessageDigestPasswordEncoded'のカスタム拡張がパスワードの前にsaltを付加する必要があります(デフォルトではあなたのスキームの代わりに' password {salt} 'を実行します)。 –

+0

私はハッキーな方法で、したがって、username + passwordはPasswordとしてmd5エンコーダに渡されます。大文字/小文字の問題がいくつかありましたが、SQLはこれを解決しました。 –

答えて

-1

はあなたにその助けを願っています。

0

あなたはこのようなあなたのapplicationContext.xlmに全体の認証を設定することができます:私は今日学校でそれを試してみましたが、それは私のために働いた

<sec:authentication-manager> 
     <sec:authentication-provider> 
      <sec:password-encoder ref="encoder" /> // And here is an encoder that will encode a password which comes from login form. 
      <sec:jdbc-user-service data-source-ref="dataSource" 
       users-by-username-query="your query" 
       authorities-by-username-query="your query for authentication table" /> 
     </sec:authentication-provider> 
    </sec:authentication-manager> 

。私は、私の権限問題を解決する最も簡単な方法を見つけ出し、それがまたあなたに適した解決策になることを願っています。

PS。申し訳ありませんが、私の答えがどのように正しいのかがわかりません。ここ1年間は読者だけだったので、今すぐ参加して質問を書くことに決めました。

0

私はハッピーな方法で、Request ParametersをServletFilterに書き直しました。このためのキーは、カスタムHttpServletRequestWrapperを使用してリクエストを変更することでした。

ユーザ名+パスワードは、パスワードとしてmd5エンコーダに渡されます。大文字/小文字の問題がいくつかありましたが、SQLを調整してこれを解決しました。

関連する問題