2012-07-04 3 views
0

최근 OpenID 지원을 추가 한 Spring Roo 빌드 사이트로 해결하려고하는 고유 한 문제가 있습니다. 나는 posted something on the Spring Forums, 그리고 내 능력의 문제를 설명하려고했지만 지금까지 어떤 도움도받지 못했습니다.모든 @Controller에 대한 사용자 정보가있는 모델 자동 채우기

내가 설명 할 수있는대로 여기에 개요가 나와 있습니다. 제가 작업하고있는 사이트는 Spring Security와 JDBCUserDetailsService를 사용하여 간단한 폼 로그인을 가졌습니다. 또한 사용자가 지원되는 OpenID를 통해 로그인 할 수 있기를 원했기 때문에 Spring Security examples for implementing OpenID w/ auto-registration 사이트 코드를 수정하여 간단한 양식과 OpenID 로그인을 모두 허용했습니다. UserDetails는 여전히 데이터베이스에서오고 있으며, 유일한 차이점은 OpenID 사용자 ID가 OpenID 공급자로부터 다시 전달 된 전체 인증 URL 문자열이라는 것입니다.

내가 겪고있는 문제는 헤더 코드에 있습니다. 그렇지 않으면를 인쇄,

<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> 

기본적으로, 사용자 교장 (즉,이 사용자가 로그인하지 않은), 다음의 로그인을 표시 페이지 문맥에없는 경우 : 우리는 다음을했던 몇 가지 간단한 JSPX 코드를했다 사용자의 사용자 이름으로 멋진 "환영 ...". 이 코드는 컨트롤러 코드에 특별한 기능을 요구하지 않았습니다. 사용자가 로그인했는지 여부.

이제 OpenID 사용자에게 문제가 있습니다. 사용자 이름은 더 이상 사용자 정의 문자열이 아닙니다. 그 대신 사용자가 읽을 수있는 ID 이름을 포함하거나 포함하지 않을 수있는 긴 URL 문자열 (Google은 예를 들어 GUID처럼 보이는 성운 문자열을 가지고 있습니다).

DB에 저장된 사용자 개체에 "별칭"필드 (UserDetails, fwiw의 인스턴스가 될 수 있음)를 추가하고 사용자가 직접 설정할 수 있도록하는 방법을 생각해 보았습니다. JSPX 측에서 그 데이터를 "일반적인"방식으로 얻으려면. 비슷한 일을하려고하는 누군가가 있음을 알고 있지만, 어떻게 접근했는지를 알 수는 없습니다.

답변

0

문제는 어떤 이유로, org.springframework.security.openid.OpenIDAuthenticationToken의 인스턴스를 반환했다

${user_profile_base}${pageContext['request'].userPrincipal 

호출했다. JavaDoc을에 독서에서, 나는 다음과 같이, 내 별명 게터 전화를 먼저 실제 교장 개체를 얻을 수 발견

${user_profile_base}${pageContext['request'].userPrincipal.principal.alias 

이 작업을 예상대로. Principal과 별칭이 null이 아닌지 확인하기 위해 추가 검사를 수행해야하지만 적어도 현재는 작동 중입니다.