8

ユーザーが別のアプリケーションから取得する以下の情報 VIN 番号、電子メール、郵便番号、および accessCode を入力する必要があるログイン ページがあります。

したがって、ユーザーを検証するには、カスタムUserDetailsServiceクラスのすべての情報が必要であり、ユーザーを認証する手順を呼び出します。

しかし、私はUserDetailsService以下のようなものを実装するとそれを見ました

@Component
 public class LoginService implements UserDetailsService {
@Autowired
LoginStoredProcedureDao loginStoredProcedureDao;

public Map<String, Object> verifyLogin(LoginDetails details) {
    return loginStoredProcedureDao.verifyLogin(details);

}
@Override
public UserDetails loadUserByUsername(String username)
        throws UsernameNotFoundException {
    // TODO Auto-generated method stub
      //verifyLogin();
    return null;
}

}

loginDetails オブジェクトは以下のようになります

public class LoginDetails {
String vin;
String email;
String zipcode;
String accessCode;
}

上記の状況で、Spring Security を使用する方法。ここで、ユーザーは自分自身を検証するためにすべての情報を提供する必要があります。

4

4 に答える 4

8

まず第一に、私はあなたの問題を別の方法で解決します。マルチステップ認証を行います。1 つ目は、Spring Security のデフォルト モデルを使用した従来のユーザー名/パスワード ログインです。2 番目のステップは、アプリケーションが実施したい認証のための追加の詳細を提供するために、ユーザーが入力する必要がある別のフォームを表示することです。

いずれにせよ、Spring セキュリティ モデルのカスタマイズを続けて、ログインに関する詳細を 1 つのステップで確認したい場合は、. @Petr からの前の回答の手順の参照に従ってください。そして、UserDetailsS​​ervice クラスのセッション属性にアクセスするには、Spring が提供するhttp://static.springsource.org/spring/docs/2.0.8/api/org/springframework/web/context/request/RequestContextHolder.htmlクラスを使用します。 .

currentRequestAttributes()オブジェクトを返す にアクセスできRequestAttributesます。RequestAttributes オブジェクトをクエリして、目的のスコープから目的の属性を取得できます。

注: これは静的メソッドであるため、単体テストには適していません。

ServletRequestAttributes基になるものにアクセスしたい場合は、 RequestAttributes をダウンキャストすることもできますHttpServletRequest

お役に立てれば。

于 2013-04-22T09:26:17.177 に答える