java - 从 Grails Controller /服务获取 OpenID URL

标签 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包含我需要的内容。如何从 Controller (或服务)空间获取它?

谢谢。

最佳答案

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

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

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

这样,您就可以自动创建新的用户记录或使用提供商提供的 OpenID 执行任何您想要的操作。

关于java - 从 Grails Controller /服务获取 OpenID URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2446366/

相关文章:

java - Hibernate 使用 hbm2ddl.auto=update 保留一些表,使用 hbm2ddl.auto=create 重新加载一些表

Java Webstart 信任库 SSL

java - Spring Boot测试RestTemplate : Pass along session id

testing - 如何模拟 'new' 运算符

grails - Grails丢弃域对象

java.io.StringReader.read() (Java 8) 在字符串末尾返回意外字符

java - 将包含 Swing Panel 从一个 Container 移动到另一个 Container 后,OfficeBean 不会显示

java - 使用mockito注入(inject)带有真实参数的bean

hibernate - Web 架构 : MVC, Lazy initialization, Data transfer Objects, Open Session In View,有没有统一的做法?

list - grails 2.5-如何在config.groovy中放置列表