2011-03-16 2 views
0

NTLM 인증을 실행하는 Sharepoint 서버에 대해 인증해야하는 Java 코드가 있습니다. 내 IDE에서 명령 줄에서 잘 실행되는이 코드를 가지고 있지만 Liferay 내에 포틀릿으로 배포하면 401 Unauthorized로 실패합니다.Jespa NTLM 인증이 한 환경에서 실패합니다.

코드는 호출 방법을 제외하고 완전히 동일합니다. 하나는 doView() 포틀릿 메소드 (포틀릿 렌더링 단계) 동안이고 다른 하나는 (공용) 정적 무효 메인 메소드에서 가져온 것입니다.

출력을 보려면 레벨 4에서 Jespa 로깅을 설정하십시오. 넷빈즈 IDE에서 :

HttpPeer: state=ST_SENT 
HttpPeer: state=ST_RECEIVED status=401 
NtlmSecurityProvider: null 
HttpPeer: state=ST_SENT 
HttpPeer: state=ST_RECEIVED status=401 
NtlmSecurityProvider: NTLM2 Session Security key negotiated successfully 
NtlmSecurityProvider: Initiator negotiated NTLMv2 
HttpPeer: state=ST_SENT 
HttpPeer: state=ST_RECEIVED status=200 

을 Liferay 로그에서 :

HttpPeer: state=ST_SENT 
HttpPeer: state=ST_RECEIVED status=401 
NtlmSecurityProvider: null 
HttpPeer: state=ST_SENT 
HttpPeer: state=ST_RECEIVED status=401 
18:37:58,578 ERROR [SharepointListPortlet:76] 
java.security.PrivilegedActionException: our.portlet.util.HttpException: 401 Unauthorized 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.security.auth.Subject.doAs(Subject.java:396) 
    at jespa.security.RunAs.runAs(RunAs.java:261) 
    at jespa.security.RunAs.runAs(RunAs.java:269) 

아마 뭔가 간단하지만 난 내 손가락을 넣어 수 없습니다. Jespa 샘플 코드를 모두 살펴본 결과 아무것도 발견되지 않았습니다. 물론 Jespa는 상용 제품이며 평가 중이므로 지원 비용을 지불 할 수 없습니다. 누구든지 제안이 있다면, 나는 감사 할 것입니다.

+0

Liferay에 사용중인 응용 프로그램 서버는 무엇입니까? 시작시 보안 정책 파일을 지정하는 것으로 보입니다. –

+0

Tomcat입니다. 표준 Liferay 번들입니다. 다음은 명령입니다. –

+0

잘못된 방향으로 생각합니다. API에'PrivilegedActionException'가 있는지 검사하고 다른 Exception에 대한 래퍼 (wrapper)라고 말하면 catch하고 catch에'getException()'을 추가하여 근본 원인을 찾는다. –

답변

0

IOPLEX 지원은 제품을 구입하지 않은 경우에도 계속 도움이됩니다.

질문에 대해서는 자격 증명을 제공하기 위해 javax.security.auth.Subject를 사용하는 대신 "헤더 ​​속성"을 사용하여 자격 증명을 제공하십시오. 어쩌면 당신의 Liferay가 새로운 Threads를 생성하고 Subject 기반의 자격 증명이 삭제 될 수 있습니다. 이 기능은 어디서나 문서화되어 있지 않으며 기술적으로 지원되지는 않습니다. 예제/HttpGetWithHeaderProperties.java를보십시오.

관련 문제