2012-06-19 3 views
1

나는 JSF-Hibernate 웹 애플리케이션을 가지고있다. Windows AD에 대해 사용자를 인증해야하며 웹 응용 프로그램은 그룹 X의 구성원 만 로그인 할 수 있어야합니다. 그렇지 않으면 오류 페이지로 리디렉션되어야합니다. 어떻게 구성 할 수 있습니까?Windows AD에 대해 사용자를 인증하는 방법은 무엇입니까?

또한 서버 컴퓨터의 Windows 사용자 이름이 아닌 모든 페이지에 로그인 한 사용자의 이름을 표시하고 싶습니다. 이 경우 System.property("user.name")을 시도했지만 서버 이름의 Windows 사용자 이름 만 반환합니다.

+0

좀 더 명확 해지기. 영어가 모국어가 아닐 수도 있지만 이것은 매우 불분명합니다. – OmniOwl

+0

Tomcat을 사용하는 경우 : http://stackoverflow.com/a/267906/368544 – mschonaker

답변

4

servletcontainer에 소위 "LDAP 영역"을 만들어야합니다. 이렇게하는 방법은 사용 된 servletcontainer에 따라 다릅니다. 사용 된 servletcontainer에 대한 세부 사항을 알려주지 않았으므로 적절한 대답을하기는 어렵지만 일반적으로 영역 구성에 대한 servletcontainer의 설명서를 읽는 것만으로 충분합니다. 예를 들어 Tomcat의 경우는 Realm Configuration HOW-TO입니다. Tomcat의 경우 JNDIRealm이 필요합니다. 자세한 내용은 JSP wiki에서 확인할 수 있습니다.

그런 다음 <security-constraint> 항목을 web.xml에 선언하여 특정 페이지에 대한 로그인이 필요하도록 웹 응용 프로그램을 구성해야합니다. web.xml에있는 <login-config> 항목에 로그인 및 오류 페이지를 구성 할 수 있습니다.

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>secured</web-resource-name> 
     <url-pattern>/secured/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <role-name>X</role-name> <!-- Should be your AD group name. --> 
    </auth-constraint> 
</security-constraint> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
     <form-login-page>/login.xhtml</form-login-page> 
     <form-error-page>/error.xhtml</form-error-page> 
    </form-login-config> 
</login-config> 

로그인 폼 j_security_check로 할 전망 및 입력 필드 명으로 j_usernamej_password를 사용한다.

<form action="j_security_check" method="post"> 
    <input type="text" name="j_username" /> 
    <input type="password" name="j_password" /> 
    <input type="submit" value="login" /> 
</form> 

당신은 검증을보다 세밀하게 제어하려는 따라서 JSF <h:inputText required="true" />를 사용하는 등, 당신은 또한 차례 HttpServletRequest#login()를 호출하는 백업 콩 액션 메소드 제출 수합니다. 단지 서블릿 컨텍스트에서 JSF 컨텍스트에서 ExternalContext#getRemoteUser() 또는 HttpServletRequest#getRemoteUser()를 사용하여 로그인 한 사용자의 이름을 얻기에 따라 또한 Performing user authentication in Java EE/JSF using j_security_check

를 참조하십시오. 다음과 같이뿐만 아니라 JSF EL에 액세스 할 수 있습니다

<p>Welcome, #{request.remoteUser}</p> 

시스템 속성은 실제로 이러한 맥락에서 absoutely 이해되지 않는다 서버의 자신의 사용자를 반환합니다.

+0

답변자는 실제로 효율적으로 보입니다. 그러나 구현할 시간이 필요하다는 것을 알 수 있습니다. 저에게는 AD 서버에 액세스 할 필요가 없습니다. 그래서, 클라이언트 윈도우의 사용자의 현재 사용자 이름을 알려주는 System.property ("user.name")와 같은 메소드가 있다면! – Potinos

+0

나는 서버로 바람둥이로 일하고있다! 나는 JSF와 함께 일하고 있기 때문에 JSF와 동일한 방법으로 # {request.remoteUser}를 호출하는 방법을 모른다. 정말 고맙습니다! – Potinos

+0

클라이언트가 웹 응용 프로그램에 로그인하지 않은 경우에는 불가능합니다. Tomcat을 사용하고 있다면 주어진 링크가 완벽하게 적합해야합니다. 서버 구성은 서버 관리자의 책임입니다. 당신은 "단지"웹 개발자 인 것 같습니다. servletcontainer 측을 구성해야하는 사용자가 될 것이라고 확신합니까? 가능한 경우 프로젝트 리드 및/또는 서버 관리자와상의하십시오. '# {request.remoteUser}'**는 ** JSF 방식입니다. 나는 명시 적으로 언급했습니다. "JSF EL에서도 액세스 할 수 있습니다."* 어떤 식 으로든 대답을 이해합니까? – BalusC

0

oVirt의 오픈 소스 프로젝트를 살펴 보시기 바랍니다. GWT를 기반으로하는 웹 관리자와 Kerberos를 인증 프로토콜로 사용하는 LDAP 서버에 대한 인증을 수행하는 REST-API 웹 응용 프로그램이 있습니다 (간단한 인증도 지원합니다).

우리가 무엇을 일반적으로 여기에 설명하지만, 제발 - 코드를 살펴 걸릴 : 우리는 사용

  • 을 JAAS + Krb5LoginModule (당신도 Kerberos를 설정해야합니다 커버 로스에 로그인 작업을 수행하기 위해 같은 KDC로, System.setProperties를 통해 관련 정보, 또는 로그인 성공 후)

  • 을 krb5.conf 파일을 사용하여, 우리는 PrivilegedAction (JAAS API를 참조)

  • 우리의 012을 실행은 GSSAPI를 사용합니다 (Kerberos의 경우이 대신 SIMPLE을 사용할 수도 있음). 로그인에 성공하면 적절한 자격 증명을 갖습니다.이 시점에서

, 당신은 물론 (

이 솔루션은 컨테이너 독립적이며 간단한 독립형 자바 프로그램에서도 작업 할 수 LDAP 서버로와 KDC 모두 제공 액티브 디렉토리에 대해 인증 올바른 JAAS conf 파일을 정의해야한다. JBoss AS 7.1.x를 사용하는 경우, standalone.xml이이 문제를 처리한다.

코드는 ovirt-engine/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/adbroker에 있으며 git에서 oVirt에서 가져올 수있다. 복제본

관련 문제