4

ユーザーを 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;
    }
}
4

1 に答える 1

1

答えを発見しました。それはばかげたものでした。サンプル コードをいくつかコピーしたところ、認証情報マッチャーが HashedCredentialsMatcher に設定されました。私はハッシュをしていなかったので、うまくいきませんでした。setCredentialsMatcher を削除すると、機能しました。

于 2012-09-07T20:20:32.953 に答える