2017-12-22 7 views
0

그래서 폼 기반 인증을 사용하는이 JSF 프로젝트가 있습니다. JSF 페이지를 여는 첫 번째 시도에서 내 로그인 서버로 리디렉션됩니다. 인증이 이루어지고 성공하면 내 응용 프로그램으로 리디렉션됩니다. 불행히도 사용자 이름과 같이 인증 서버가 제공하는 정보를 얻는 방법을 모르겠습니다.JSF 페이지에서 Liberty의 FORM 기반 인증으로부터 사용자 교장을 얻는 방법은 무엇입니까?

나는 "Signed in as"라는 텍스트가있는 페이지가 있습니다. getCurrentUserPrincipal() 메소드로 ManagedBean에 의해 설정되어야합니다.

<h:outputText value="#{myBean.getCurrentUserPrincipal()}"/> 

현재이 메소드는 비어 있습니다. WSSubject.getCallerPrincipal()FacesContext.getCurrentInstance(). getExternalContext(). getUserPrincipal()로 시도했지만 null을 반환했습니다. 그 방법으로 필요한 정보를 어떻게 얻을 수 있습니까? 심지어 가능합니까? 어떤 정보가 필요한지 잘 모르겠습니다. 따라서 누락 된 정보가 있으면 최대한 제공하겠습니다.

public String getCurrentUserPrincipal() { 
    return principal.getName(); 
} 
+0

** 인증 서버가 정보를 저장하는 위치를 어떻게 알 수 있습니까? 이 질문은 java, jsf, servlets 또는 java-ee와 관련이 없습니다. – Kukeltje

+0

좋아, 어디 양식 기반 인증 (web.xml) 할 때 정보를 저장할 수 있습니다. 나는 로그인으로 돌아가고 나의 응용 프로그램으로 돌아 간다. 적어도 j2ee 나 서블릿과 관련이없는 것은 무엇입니까? 그것이 쿠키에 저장되어 있다고 가정 해 봅시다. 어떻게 정보를 얻을 수 있습니까? 또는 LTPA 토큰 (쿠키와 동일)? 그 때 무엇? Btw. 나는 자유를 사용하고있다. server.xml에 구성이 필요합니까? – kinglite

답변

0

: 이 outputText 필드,처럼 관리 빈 뭔가에 게터를 제공하는 위

다음
@Inject 
private Principal principal; 

, 당신의 HTML을 기반으로 :

+0

마지막으로 볼 수 있듯이, java-ee (j2ee는 이전의 약어입니다)가 아니라 jsf가 아니며 서블릿이 아니라면 의미있는 의미로 관련이 없습니다. 그러나 위대한 당신이 그것을 해결. – Kukeltje

0

처럼 관리 빈에 주체를 주입 일부 파기 후에 우리의 인증 서버가 siteminder 서비스이고 정보가 쿠키 (SMSESSION)와 응답의 헤더 정보로 돌아 왔다는 것을 알게되었습니다. 그래서 사용자 이름을 얻기 위해 헤더 정보를 읽는 것으로 충분할 것입니다.

그러나 주요 또는 주제 여전히 을 반환합니다. 이것을 얻고 보안을 강화하기 위해 Liberty에 TAI를 추가했습니다. 이 작업이 완료되면 herehere을 읽을 수 있습니다. 내 myTAI.jar은 정말 간단합니다. 필자는 ldap 레지스트리를 구성했기 때문에 추가 인증을 위해 주어진 사용자 이름 (헤더)의 사용자 보안 이름 (문자열, 예 : uid = .., ou = .., ou = ..)이 필요합니다.

return TAIResult.create(HttpServletResponse.SC_OK, userSecName);

백그라운드에서 Liberty는 몇 가지 추가 인증을 수행하고 원칙과 제목을 만듭니다. 모든 것이 올바르게 구성되고 사용자가 응용 프로그램을 입력 할 수있는 권한이있는 경우, 그는 원칙 및 주제 객체를 사용할 수있게됩니다.

관련 문제