SpringSecurityでOpenID認証を実装する正しい方法を理解しようとしています。
public class OpenIDUserDetailsService implements
UserDetailsService,
AuthenticationUserDetailsService {
@Override
public UserDetails loadUserByUsername(String openId) throws
UsernameNotFoundException, DataAccessException {
// I either want user email here
// or immediately delegate the request to loadUserDetails
}
@Override
public UserDetails loadUserDetails(Authentication token) throws
UsernameNotFoundException {
// This never gets called if I throw from loadUserByUsername()
}
private MyCustomUserDetails registerUser(String openId, String email) {
...
}
}
ユーザーがまだアプリケーションに登録されていないシナリオを検討しています。ユーザーを登録するには、OpenIDとメールアドレスを知っている必要があります。
OpenIDプロバイダーがユーザーをアプリケーションにリダイレクトするloadUserByUsername()と、が呼び出されますが、この場合、私はユーザーのOpenIDについてのみ認識しています。だから、投げUsernameNotFoundExceptionてloadUserDetails()電話がかかってこないので、ユーザーを登録できません。
ここでの一般的な解決策は何ですか?FakePartialUserDetailsfromのようなものを返し、が呼び出されloadUserByUsername()たときloadUserDetails()にユーザーを登録してから実際のを返すとどうなりMyCustomUserDetailsますか?
SpringSecurity3.0.7.RELEASEを使用しています