Аутентификация Широ вызывает исключение AuthenticationException, решение

Shiro
image

проблема

Изучая Широ, встречайте броски Широorg.apache.shiro.authc.AuthenticationExceptionИсключение, полное исключение выглядит следующим образом:

org.apache.shiro.authc.AuthenticationException: Authentication failed for token submission [org.apache.shiro.authc.UsernamePasswordToken - xue8, rememberMe=false].  Possible unexpected error? (Typical or expected login exceptions should extend from AuthenticationException).

Причина этого исключения связана с ошибкой аутентификации, но я думаю, что с тем Царством, которое я написал, не должно быть ничего плохого Наконец, после некоторого метания, я посмотрел на некоторые исходные коды Широ и, наконец, я знаю причину это проблема, так что я хочу добавить Процесс записывается.

решать

я здесьRealmСпособ подтверждения личностиdoGetAuthenticationInfoДобавьте точки останова для отладки

image
найдено изauthenticationTokenполучить пользователейпарольgetCredentials()Странно, когда что-то идет не так,имя пользователяgetPrincipal()в порядке, и, глядя наauthenticationTokenисходный код, обнаружил, что это одно и то же
image
image
Имя пользователя и пароль переданыdoGetAuthenticationInfoЭто всегда успешно, так почему же это неправильно? отладкаdoGetAuthenticationInfoКогда я обнаружил, что имя пользователя и пароль хранятся по-разному
image
Имя пользователя хранится в виде строки, а пароль хранится в виде массива символов типа char[].Может ли это быть вызвано этой проблемой?subject.login(token)В методе имя пользователя и пароль хранятся в токене в виде строки,
image
почему ты пришелdoGetAuthenticationInfoОн изменился, поэтому я продолжал проверятьUsernamePasswordTokenИсходный код, потому что этот объект преобразует строковый тип пароля в тип char[]?
image
Глядя на исходный код, я вижу, что это действительноUsernamePasswordTokenПреобразование входящего пароля пароля из строкового типа String в тип символьного массива char[] , я понимаю это здесь, вRealmизdoGetAuthenticationInfoметод, входящийAuthenticationToken authenticationTokenИмя пользователя хранится в String, а пароль хранится в Char[].Определенно невозможно получить данные типа Char[] путем получения String, поэтому я изменил пароль на Char[] для получения следующим образом
image

решить проблему.

Оригинальный адрес:В ожидании твоего таланта /2019/02/01/…