2015-12-18 1 views
5

Windows7環境でTomcat Serverに既存のMavenプロジェクトをデプロイしました。私はtomcat7、spring-security-core 3.1.0を使用しています。スプリングセキュリティjava.lang.IllegalArgumentException:入力に16進数でない文字

はしかし、毎回私がWebアプリケーションにログインするよ、私はエラー

java.lang.IllegalArgumentException: Non-hex character in input 

コードは、Linux環境で完全に正常に動作しているを受けました。だから私は自分のローカル環境でwindows7を使っているからだと思っていた。インターネットを調べると、それはLinuxとWindowsの間のエンコードの問題だとわかりました。

私は

JAVA_TOOL_OPTIONSの-Dfile.encoding = UTF8

を設定する試みたが、成功していません。私を助けてください。前もって感謝します!

+0

その例外のスタックトレースはありますか? – holmis83

答えて

1

ほとんどの場合、あなたがログインしたときに、イベントが起こるのは、このような順序である:

  1. 春には、ユーザー名でDBからエンティティを選択します。
  2. スプリングは、格納されたエンコードされたパスワードと一致するように、入力されたパスワードをチェックする必要があります。

一致するかどうかを確認するには、SpringはPasswordEncoderを使用している可能性が最も高いです。

パスワードエンコーダは、格納されているエンコードされたパスワードが(このPasswordEncoderによって以前にエンコードされた)16進文字列であることを前提としています。したがって、CharSequenceをbyte []に​​デコードしようとしますが、失敗します(source)。解決策は、以前に符号化されたパスワードでユーザを持続させることである。 BCryptPasswordEncoderによって。

0

回答Alex Derkachは私のために右です!
私の場合、まっすぐな店舗パスワード(開発中)のDBはUser = roor、psw = rootのように見えます。
.passwordEncoder(new StandardPasswordEncoder("53c433t")); !さんのコメント
のコメント(削除)の場合!!しかし、パスワードは暗号化された形式で保存する必要があります!

0

これは、パスワードエンコーダーをミキシングする理由が考えられます。 PasswordEncoderのさまざまな実装があります。たとえば、エンコードにSymmetricPasswordEncoder、デコードにStandardPasswordEncoderを使用すると、この例外が発生することがあります。

関連する問題