0

Spring Security は、ユーザー名とパスワードを渡すことができるような API を提供し、認証が成功した場合は認証オブジェクトを返すか、認証が失敗した場合は AuthenticationCredentialsNotFoundException を返しますか?

私の要件を詳しく説明しましょう。

私たちのアプリケーションには HTTP API (たとえば、/createXXX.do) があり、クライアントはユーザー名、パスワード、およびその他のパラメーターでこれをヒットしています。

ここで、このアクセスを認証 + 承認したいと考えています (HTTP ヒットからアプリケーションへのアクセス)。

私の計画した設計は次のようになります: a) HTTP API コンテキスト (つまり、/createXXX.do) へのアクセスを制限しません。

b) リクエストが doGet()/doPost() に到達したら、リクエストからユーザー名とパスワードを取得し、以下のようなスプリング セキュリティ API を使用します。

認証 validateXXXXX(String username, String password) は AuthenticationCredentialsNotFoundException をスローします。

c) 上記の API により、これらのユーザー名/パスワードが既存の Spring セキュリティ チェーンに内部的にプッシュされ、認証が成功した場合は認証オブジェクトが返され、認証が失敗した場合は AuthenticationCredentialsNotFoundException が返されます。

d) 認証が失敗した場合、AuthenticationCredentialsNotFoundException をキャッチし、AUTHENTICATION_ERROR コードで HttpServletResponse を返します。

e) 認証オブジェクトからの権限に基づいて、認証が成功するために、AUTHORIZATION_ERROR コードで HttpServletResponse を許可または返します。

そのような春のセキュリティ API について知っている人はいますか? ポインタ/提案は高く評価されます。

ありがとう。

4

1 に答える 1

1

認証ソースが 1 つしかない場合 (LDAP のみまたは DB のみ)、セキュリティ コンテキストで org.springframework.security.authentication.AuthenticationProvider の実装を構成できます。次に、それを使用できます。

User user = new User(login, password, true, true, true, true, new ArrayList<GrantedAuthority>());
Authentication auth = new UsernamePasswordAuthenticationToken(user, password,new ArrayList<GrantedAuthority>());
try {
    auth = authenticationProvider.authenticate(auth);
} catch (BadCredentialsException e) {
    throw new CustomBadCredentialsException(e.getMessage(), e);
}

// but your need to push authorization object manually
SecurityContext sc = new SecurityContextImpl();
sc.setAuthentication(auth);
SecurityContextHolder.setContext(sc);

それは「低レベル」の操作です。Spring Security 名前空間の要素を使用できます。ログイン コントローラーやログイン フォームを提供できます (この状況を自動的に処理できます)。

于 2012-12-14T09:57:08.090 に答える