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()
電話がかかってこないので、ユーザーを登録できません。
ここでの一般的な解決策は何ですか?FakePartialUserDetails
fromのようなものを返し、が呼び出されloadUserByUsername()
たときloadUserDetails()
にユーザーを登録してから実際のを返すとどうなりMyCustomUserDetails
ますか?
SpringSecurity3.0.7.RELEASEを使用しています