0

在 Spring Security OpenID 中,如何获取用户详细信息?(电子邮件、名字、..)

除了 !我想在 java 或 jsp 文件中获取这些,而不是在 xml 文件中。

4

1 回答 1

0

您需要的称为属性交换。它是 OpenID 的一项功能,允许从提供商交换用户注册数据(例如姓名、电子邮件等)。注意:支持的属性交换值列表因提供者而异。

假设您已经配置了 OpenID 并运行了 Spring Security,那么启用属性交换非常简单。

<!--in your spring config -->
<openid-login ....>
  <!-- here is sample config for getting email -->
  <attribute-exchange> 
   <openid-attribute 
      name="email" 
      type="http://schema.openid.net/contact/email" 
      required="true"
   /> 
  </attribute-exchange>
</openid-login>

Spring 会将属性数据保存到OpenIDAuthenticationToken. 然后在你的 *UserDetailsS​​ervice

public UserDetails loadUserDetails(OpenIDAuthenticationToken token) {
  ...
  List<OpenIDAttribute> attributes = token.getAttributes();
  user.setEmail(getAttribute("email", attributes));
  ..
}

private String getAttribute(String attrName, List<OpenIDAttribute> attrs) { 
  //do work to parse for email attribute
}
于 2013-07-02T18:57:48.027 回答