从Grails控制器/服务获取OpenID URL

时间:2010-03-15 10:28:17

标签: java spring grails spring-security

我正在使用acegi 0.5.2并启用了OpenID支持。我想知道如何访问提供商(即Google,Yahoo!)返回的URL(或用户名)。我找不到任何关于这方面的文档,所以我追踪了acegi的代码并在GrailsOpenIdAuthenticationProvider中找到了这个:

OpenIDAuthenticationToken response = (OpenIDAuthenticationToken) authentication
OpenIDAuthenticationStatus status = response.status

// handle the various possibilites
if (status == OpenIDAuthenticationStatus.SUCCESS) {
 // Lookup user details
 UserDetails userDetails = _userDetailsService.loadUserByUsername(response.identityUrl)
 return new GrailsOpenIdAuthenticationToken(userDetails, response.status, response.identityUrl)
}

似乎response.identityUrl包含了我需要的东西。如何从控制器(或服务)的空间获取它?

感谢。

1 个答案:

答案 0 :(得分:1)

经过长时间的研究和多次试验和错误后,我找到了解决方案。

acegi插件为您的项目提供了LoginController,它具有以下操作:authfail。在其实现中,您可以通过以下代码检查OpenID值:

println "openid = ${session['SPRING_SECURITY_LAST_EXCEPTION'].extraInformation}"

然后,您可以使用提供商提供的OpenID自动创建新的用户记录或执行任何操作。