当前位置: 首页 > 知识库问答 >
问题:

Spring Security OpenID-UserDetailsService

汝才良
2023-03-14

试图了解使用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

共有1个答案

乐山
2023-03-14

这很有趣,但通过转移到Spring Security 3.1.0.发行版来解决这个问题。

对于相同的场景,行为完全不同--不调用loaduserbyusername(),而是调用loaduserdetails()

 类似资料:
  • 本文展示了如何使用 JPA 自定义 UserDetailsService 及数据库 的方式来进行认证。在本例,我们将认证信息存储于 H2 数据库中。 在 ldap-authentication项目的基础上,我们构建了一个jpa-userdetailsservice项目。 build.gradle 修改 build.gradle 文件,让我们的jpa-userdetailsservice项目成为一个

  • 致力于从Spring Security xml配置移动到Spring Security中的Java配置。 在我的类SecurityConfiguration中,它扩展了WebSecurity配置适配器。然而,问题是安全过滤器(特别是UsernamePasswordAuthenticationFilter)没有使用userDetailsService。我查看了启动,似乎这不是在Spring boot

  • 我正在尝试从基于Spring XML的配置迁移到纯Java配置,我已经配置了所有配置文件,但当我尝试在登录页面中输入用户名和密码时,它会再次将我重定向回登录页面。我相信userServiceImpl方法没有被调用,因为控件没有被调用。在这里,我有一个自动连接的userServiceImpl方法,它实现了Spring Security核心凭据的UserDetailsService。 自定义身份验证成

  • 例如,下面的代码试图处理一个简单的登录,使用密码编码器对db表进行身份验证。表单post包括一个“客户端”,一个持久化的IP地址和一些url路径信息,以便在登录后进行深度链接。(对于今天的单页web应用程序来说,这些都是非常基本的东西)我最初使用xml config工作,但是javaConfig让我陷入了困境。 我不知道userDetailsService,AuthenticationManage

  • 尝试使用自定义userDetailsService学习Spring Security性并面临以下问题 访问受限页(/admin或/user)时,spring security将启动并显示登录页。 但在使用正确的用户名和密码提交登录页后,在调用自定义userDetailsService实现中的loadUserByUsername方法之前,将直接显示拒绝访问页。 在日志中,只有异常--在访问受限页面时

  • 我对spring很陌生,我对Spring Security性有这个问题。实际上,它只在没有自定义UserDetailsService实现的情况下工作。 帐户和角色对象 角色 用户详细信息的适配器 自定义UserDetailsService 网络。xml 根上下文 安全上下文 我希望你们中的一些人能帮助我,救救我:)