打开 id 使用 google 和 spring mvc 登录
open id log in with google and spring mvc
我正在尝试开发一个 spring mvc 项目,带有开放 ID 和 google 登录。
我正在使用 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配置中对应的代码是什么。
任何建议和一些代码示例。
我也在使用 spring 安全性。
这是提供商:
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;
}
}
感谢所有帮助。
OpenIDLoginConfigurer 构建器将构建 OpenIDAuthenticationFilter 并在 spring 安全过滤器链中注册过滤器。
OpenIDLoginConfigurer 接受 attributeExchange 参数来构建 OpenIDAuthenticationFilter.These 是与 openid 提供商验证后的回调参数。
要通过 spring 安全性使用开放 ID 进行身份验证,请求的 url 将是“/j_spring_openid_security_check” OpenIDAuthenticationFilter 将处理此请求,通过访问 authentication.Once 认证完成,openid用户将映射到本地用户。
Here 是一个简单的示例应用程序,它使用 spring 安全的 openId 登录。
我正在尝试开发一个 spring mvc 项目,带有开放 ID 和 google 登录。 我正在使用 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配置中对应的代码是什么。
任何建议和一些代码示例。
我也在使用 spring 安全性。
这是提供商:
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; } }
感谢所有帮助。
OpenIDLoginConfigurer 构建器将构建 OpenIDAuthenticationFilter 并在 spring 安全过滤器链中注册过滤器。
OpenIDLoginConfigurer 接受 attributeExchange 参数来构建 OpenIDAuthenticationFilter.These 是与 openid 提供商验证后的回调参数。
要通过 spring 安全性使用开放 ID 进行身份验证,请求的 url 将是“/j_spring_openid_security_check” OpenIDAuthenticationFilter 将处理此请求,通过访问 authentication.Once 认证完成,openid用户将映射到本地用户。
Here 是一个简单的示例应用程序,它使用 spring 安全的 openId 登录。