0

ユーザーを認証する通常の方法は、以下を呼び出すことです。

SecurityUtils.subject.login(new UsernamePasswordToken(params.username、params.password))

ただし、ユーザー名とパスワードを入力せずに、自動的にログインしたい場合はどうすればよいですか?userServiceに次のようなメソッドを作成しました。

   def logIn(User user){
    Object userIdentity = user.email
    String realmName = "ShiroDbRealm";
    PrincipalCollection principals = new SimplePrincipalCollection(userIdentity, realmName);
    Subject subject = new Subject.Builder().principals(principals).buildSubject();
    ThreadContext.bind(subject)
   }

しかし、これは機能しません、ヒントはありますか?

4

1 に答える 1

0

私はなんとか問題を解決することができました。AuthenticationTokenインターフェイスを実装する独自のクラスを作成しました。

class UsernameToken implements AuthenticationToken{

  private username;

  public UsernameToken(String username) {
    this.username = username;
  }

  public String getPrincipal() {
    return username;
  }
  public String getCredentials() {
    return username;
  }
}

デフォルトのレルムとまったく同じように見えますが、パスワードの検証がない新しいレルムを作成しました。今、私は使用することができます

SecurityUtils.subject.login(new UsernameToken(user.username))
于 2011-10-11T13:28:52.487 に答える