2015-12-18 18 views
5

Ho distribuito un progetto Maven esistente nel mio server Tomcat in ambiente Windows7. Sto usando tomcat7, spring-security-core 3.1.0.Spring Security java.lang.IllegalArgumentException: carattere non esadecimale nell'input

Tuttavia, ogni volta che sto accedendo nella mia webapp, ho ricevuto un errore

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

Il codice funziona perfettamente bene in ambiente Linux. Quindi stavo pensando che è perché sto usando Windows 7 nel mio ambiente locale. Quando guardo su internet ho visto che si tratta di un problema di codifica tra linux e windows.

ho provato ad installare

JAVA_TOOL_OPTIONS -Dfile.encoding = UTF8

, ma non sono riusciti. Per favore aiutatemi. Grazie in anticipo!

+0

Avete uno stacktrace per tale eccezione? – holmis83

risposta

1

Molto probabilmente, quando si effettua il login, gli eventi accadono è tale ordine:

  1. Primavera seleziona un'entità da DB per nome utente.
  2. Spring deve verificare la password immessa per la corrispondenza con la password codificata memorizzata.

Per verificare una corrispondenza, Spring utilizza PasswordEncoder, che è stata probabilmente configurata.

Il codificatore della password prevede che la password codificata memorizzata sia una sequenza di caratteri esadecimali (codificata in precedenza da PasswordEncoder). Quindi, prova a decodificare CharSequence in byte [], ma fallisce (source).

La soluzione è di mantenere utenti con password precedentemente codificata, ad es. da BCryptPasswordEncoder.

0

Risposta Alex Derkach ha ragione per me!
Nel mio caso ho DB con password di archivio diritta (sviluppo) simile a User = roor, psw = root.
Quindi quando commento (cancella) .passwordEncoder(new StandardPasswordEncoder("53c433t")); ! il suo lavoro
!! Ma è sbagliato, la password deve essere memorizzata in forma criptata !!!

0

Un possibile motivo per questo è il mix di codificatori di password. Esistono diverse implementazioni di PasswordEncoder. Ad esempio, se si utilizza SymmetricPasswordEncoder per la codifica e StandardPasswordEncoder per la decodifica, si può ottenere questa eccezione.

Problemi correlati