gpt4 book ai didi

java - Spring Security OpenID - UserDetailsS​​ervice,AuthenticationUserDetailsS​​ervice

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:03 26 4
gpt4 key购买 nike

试图了解使用 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) {
...
}
}

我正在考虑用户尚未在我的应用程序中注册的情况。要注册用户,我需要知道它的 OpenID 和电子邮件。

当 OpenID 提供商将用户重定向回我的应用程序时,将调用 loadUserByUsername(),但在这种情况下,我只知道用户的 OpenID。所以,我抛出 UsernameNotFoundException 然后 loadUserDetails() 永远不会被调用,所以我无法注册用户。

这里的常见解决方案是什么?如果我从 loadUserByUsername() 返回类似 FakePartialUserDetails 的内容,然后在调用 loadUserDetails() 时注册用户,然后返回真正的 MyCustomUserDetails?

我正在使用 Spring Security 3.0.7.RELEASE

最佳答案

这很有趣,但通过迁移到 Spring Security 3.1.0.RELEASE 设法解决了这个问题。

对于相同的场景,行为是完全不同的 - loadUserByUsername() 没有被调用,而是调用了 loadUserDetails()。 p>

关于java - Spring Security OpenID - UserDetailsS​​ervice,AuthenticationUserDetailsS​​ervice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com