Spring mvc 使用所有@Controller的用户信息自动填充模型

Spring mvc 使用所有@Controller的用户信息自动填充模型,spring-mvc,spring-security,openid,spring-roo,Spring Mvc,Spring Security,Openid,Spring Roo,我有一个独特的问题,我正试图用一个SpringRoo构建的站点来解决,我最近添加了OpenID支持。我试着尽我所能描述这个问题,但到目前为止我还没有得到任何帮助 以下是我所能描述的概要。我正在使用的站点有一个简单的表单登录,使用Spring安全性和JDBCUserDetailsService。我们还希望用户能够通过受支持的OpenID登录,因此使用我们修改了我们的站点代码,以允许简单表单和OpenID登录。UserDetails仍然来自数据库,唯一的区别是OpenID userid是从OpenI

我有一个独特的问题,我正试图用一个SpringRoo构建的站点来解决,我最近添加了OpenID支持。我试着尽我所能描述这个问题,但到目前为止我还没有得到任何帮助

以下是我所能描述的概要。我正在使用的站点有一个简单的表单登录,使用Spring安全性和JDBCUserDetailsService。我们还希望用户能够通过受支持的OpenID登录,因此使用我们修改了我们的站点代码,以允许简单表单和OpenID登录。UserDetails仍然来自数据库,唯一的区别是OpenID userid是从OpenID提供者传回的完整身份验证url字符串

我遇到的问题是我们的头代码。我们有一些简单的JSPX代码,可以执行以下操作:

  <c:choose>
    <c:when test="${pageContext['request'].userPrincipal == null}">
      <span>
        <form method="post" action="${login}" name="login_form" id="login_form">
          <input name="j_username" type="text" id="j_username" />
          <input name="j_password" type="password" id="j_password" />
          <input name="submit" type="submit" id="proceed" />
        </form>
      </span>
      <span>or <a href="${registration_form}">Register</a></span>
    </c:when>
    <c:otherwise>
      <span>Hello, <a href="${user_profile_base}${pageContext['request'].userPrincipal.name}"><img src="${user_img_url}" width='10' height='10' />${pageContext['request'].userPrincipal.name}</a></span> | <a href="${logout}">Logout</a>
    </c:otherwise>
  </c:choose>

或
你好|
基本上,如果用户主体不在页面上下文中(即用户未登录),则显示的登录名为,否则用用户的用户名打印一个漂亮的“欢迎…”。该代码不需要控制器代码中的特殊规定即可正常工作:用户是否登录

现在问题出在OpenID用户身上。用户名不再是用户定义的漂亮字符串。相反,它是一个很长的URL字符串,可能包含也可能不包含用户可读的ID名称(例如,Google有一些看起来像GUID的模糊字符串)


我考虑过向数据库中存储的用户对象添加一个“别名”字段(它恰好是UserDetails,fwiw的一个实例),并允许用户自己设置它,但我不知道如何以“通用”的方式从JSPX端获取该数据。我知道有人在尝试做类似的事情,但我没有找到任何东西显示他们是如何做到的。

问题是,无论出于什么原因,打电话给

${user_profile_base}${pageContext['request'].userPrincipal
正在返回的实例。在阅读JavaDoc时,我发现我可以先获取实际的主体对象,然后调用别名getter,如下所示:

${user_profile_base}${pageContext['request'].userPrincipal.principal.alias
这一切都如期进行。我可能需要做一些额外的检查,以确保主体和别名不为null,但至少它现在可以工作了