And*_*lov 5 java openid spring spring-security
试图了解使用Spring Security实现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) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑用户尚未在我的应用程序中注册的情况.要注册用户,我需要知道它的OpenID和电子邮件.
当OpenID提供程序将用户重定向回我的应用程序时,会loadUserByUsername()被调用,但在这种情况下,我只知道用户的OpenID.所以,我正在投掷UsernameNotFoundException,然后loadUserDetails()永远不会被调用,所以我无法注册用户.
这里有什么常见的解决方案?如果我返回类似FakePartialUserDetails的loadUserByUsername(),然后当loadUserDetails()被调用时,我注册用户,然后返回真实MyCustomUserDetails?
我正在使用Spring Security 3.0.7.RELEASE
这很有趣,但通过迁移到Spring Security 3.1.0.RELEASE成功解决了这个问题。
对于相同的场景,行为是完全不同的——loadUserByUsername()不被调用,而是loadUserDetails()被调用。
| 归档时间: |
|
| 查看次数: |
3874 次 |
| 最近记录: |