Как мне аутентифицировать пользователя с помощью Широ?

Я снова и снова повторял, как ввести пользователя в систему с помощью Shiro, но по-прежнему кажется, что отсутствует важная часть: как shiro аутентифицирует заданное имя пользователя и пароль по сохраненным именам пользователей и паролям? Самое большее, что я понял, это It is each Realm's responsibility to match submitted credentials with those stored in the Realm's backing data store отсюда. Но как это делается?

Ниже то, что я пробовал, но результат по-прежнему недействителен.

ЛогинКонтроллер

@RequestMapping(value = "/login.htm", method = RequestMethod.POST)
protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object cmd, BindException errors) throws Exception {

    LoginCommand command = (LoginCommand) cmd;
    UsernamePasswordToken token = new UsernamePasswordToken(command.getUsername(), command.getPassword());
    System.out.println("onSubmit");
    System.out.println(token.getUsername());
    System.out.println(token.getPassword());

    try
    {
        SecurityUtils.getSubject().login(token);
    } catch (AuthenticationException e) {
        errors.reject("error.invalidLogin", "The username or password was not correct.");
    }

    if (errors.hasErrors()) {
        return showForm(request, response, errors);
    } else {
        return new ModelAndView("accessTest");
    }
}

Область

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {
    UsernamePasswordToken token = (UsernamePasswordToken) authcToken;

    System.out.println("doGetAuthenticationInfo");
    System.out.println(user.getUsername());
    System.out.println(user.getPassword());

    // user is a test object in place of a database
    if( user != null ) {
        return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName());
    } else {
        return null;
    }
}

person Jesse Jashinsky    schedule 31.08.2012    source источник
comment
Вы можете поделиться выводом? Мое первое предположение заключается в том, что token.getPassword() != user.getPassword().   -  person jbunting    schedule 31.08.2012
comment
Это. Я проверил все выходные данные, все выходные данные равны.   -  person Jesse Jashinsky    schedule 31.08.2012


Ответы (1)


Обнаружил ответ. Это было глупо. Я скопировал пример кода, и они установили для сопоставления учетных данных значение HashedCredentialsMatcher. Я не занимался хешированием, поэтому это не сработало. Удалил setCredentialsMatcher и все заработало.

person Jesse Jashinsky    schedule 07.09.2012
comment
Извините, что беспокою вас так долго. Не могли бы вы опубликовать полный класс вашего царства. Я не могу найти примеров, объясняющих, каким должно быть имя класса, чтобы я мог аутентифицировать пользователей в своей базе данных :( - person chris loughnane; 18.04.2018
comment
Извините, @chrisloughnane, этого кода давно нет, поэтому, боюсь, я не могу вам помочь. - person Jesse Jashinsky; 24.05.2018