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

使用google和spring mvc打开id登录

皇甫敏达
2023-03-14

我试图开发一个开放id和谷歌登录的spring mvc项目。我使用的是java配置。xml配置为

 <openid-login user-service-ref="openIdUserService" >
  <attribute-exchange >
<openid-attribute name="email" type="http://schema.openid.net/contact/email"    required="true" />
  <openid-attribute name="firstName" type="http://axschema.org/namePerson/first" required="true" />
  <openid-attribute name="lastName" type="http://axschema.org/namePerson/last" required="true" />
</attribute-exchange>

但不知道java配置中对应的代码是什么。

public class OpenIdUserDetailsService implements UserDetailsService, AuthenticationUserDetailsService {

    @Autowired
    private CustomerRepository userRepository;
    private static final List DEFAULT_AUTHORITIES = AuthorityUtils.createAuthorityList("ROLE_USER");

    @Override
    public UserDetails loadUserByUsername(String id) throws UsernameNotFoundException {
        Customer user = userRepository.findByOpenIdIdentifier(id);

        if (user == null) {
            throw new UsernameNotFoundException(id);
        }
        OpenIdUser openIdUser = new OpenIdUser(user.getOpenIdIdentifier(), DEFAULT_AUTHORITIES);
        openIdUser.setName(user.getFirstname());

        return openIdUser;
    }

    @Override
    public UserDetails loadUserDetails(OpenIDAuthenticationToken token) {
        String id = token.getIdentityUrl();

        Customer user = userRepository.findByOpenIdIdentifier(id);

        if (user != null) {
            OpenIdUser openIdUser = new OpenIdUser(user.getOpenIdIdentifier(), DEFAULT_AUTHORITIES);
            openIdUser.setName(user.getFirstname());

            return openIdUser;
        }

        String firstName = null;
        String lastName = null;
        String fullName = null;

        List attributes = token.getAttributes();

        for (OpenIDAttribute attribute : attributes) {
            String name = attribute.getName();

            if (name.equals("firstname")) {
                firstName = attribute.getValues().get(0);
            } else if (name.equals("lastname")) {
                lastName = attribute.getValues().get(0);
            } else if (name.equals("fullname")) {
                fullName = attribute.getValues().get(0);
            }
        }

        if (fullName == null) {
            StringBuilder fullNameBldr = new StringBuilder();

            if (firstName != null) {
                fullNameBldr.append(firstName);
            }
            if (lastName != null) {
                fullNameBldr.append(" ").append(lastName);
            }

            fullName = fullNameBldr.toString();
        }

        OpenIdUser openIdUser = new OpenIdUser(id, DEFAULT_AUTHORITIES);
        openIdUser.setName(fullName);
        openIdUser.setNewUser(true);

        Customer u = new Customer();
        u.setOpenIdIdentifier(openIdUser.getUsername());
        u.setFirstname(openIdUser.getName());

        userRepository.save(u);

        return openIdUser;
    }
}

共有1个答案

洪博涛
2023-03-14

OpenIDLoginConfigurer构建器将在Spring Security筛选器链中构建OpenIDAuthenticationFilter和register filter。

OpenIDLoginConfigurer使用attributeExchange参数构建OpenIdAuthenticationFilter,这些参数是使用openid Provider进行身份验证后的回调参数。

为了通过spring security使用open id进行身份验证,请求的url将是“/j_spring_openid_security_check”,OpenIDAuthenticationFilter将通过点击openid提供者进行身份验证来处理此请求。

下面是使用spring Security进行openId登录的简单示例应用程序。

 类似资料:
  • 问题内容: 我想尝试使用开放ID作为我要制作的网站上的登录系统。我已经查看了这个网站,但我不确定这一切如何运作以及如何运作。 现在清楚的是,开放id使用url而不是密码。您能否给我一些链接来帮助我开始使用此工具?我是否需要了解高级php才能为我工作。我只知道php的基础知识。 问题答案: 您可以使用PHP OpenID库这里或PHP 4 这里

  • 问题内容: 我正在尝试建立 Spring MVC + Hibernate 项目,但是这让我发疯了。我还将考虑建议订购xml配置文件的建议。 我有以下文件: 我收到此stacktrace错误: 另外,如果有人可以给我一些提示以帮助我组织xml配置文件,我将非常高兴。我是.NET开发人员,所有这些Maven + xml配置对我来说都是新的东西。 谢谢 问题答案: 我的解决方案是将Datasource中

  • 我对使用servlet和JSP相当陌生,我正在尝试获取一个列出所有用户的JSP页面,根据用户id重定向到编辑表单JSP,列出所有用户的JSP页面使用迭代器显示我的JDBC表中的数据,但我似乎不知道如何分别为每个用户的编辑链接分配一个值,以便它可以用该用户的数据加载编辑表单,谢谢你的帮助。 这里我当前的jsp页面代码列出所有学生 然后,id值应该分配给servlet中的一个值,该值用于在调用编辑时从

  • cmf_get_current_user_id() 功能 获取当前登录前台用户id 参数 无 返回 int用户 ID,0表示用户未登录

  • 对于使用selenium的python程序的不同运行,是否有一种方法可以让我打开并使用凭据登录的浏览器在以后的运行中打开并使用? 我正在调试一个代码。每次我需要使用凭据登录时,都会在浏览器上显示。目前,每次我停止代码时,web浏览器都会关闭。有没有办法让我已经打开并登录的浏览器的副本保持打开状态,并将其用于以后的调试,这样每次我都不需要再次输入登录凭据? 我打开浏览器的代码如下: 编辑: 事实上,

  • 在本章中,我们将介绍如何在Firebase中设置Google身份验证。 第1步 - 启用Google身份验证 打开Firebase信息中心,然后点击左侧菜单中的身份验证。 要打开可用方法的列表,需要在标签菜单中单击登录方法。 现在可以从列表中选择Google,启用它并保存。参考下图 - 第2步 - 创建登录按钮 创建一个文件:,并将添加两个按钮。参考代码如下 - 第3步 - 登录和退出 在这一步中