2010-07-27 10 views
0

저는 애플리케이션 서버로 Apache Geronimo를 사용하고 있습니다. 그리고 Apache Directory Service를 사용하여 LDAP를 통해 인증이 이루어지고 있습니다. JavaEE 소프트웨어 개발에 대한 이전 경험이 없으므로 제발 쉽게 이해해주세요. 더 자세히 설명해야 할 필요가 있으면 알려주십시오. 사용자가 로그인을 시도 할 때 발생하는 세 가지 다른 행동이있다 https://cwiki.apache.org/GMOxDOC22/ldap-sample-app-ldap-sample-application.htmlLDAP 인증을 사용하는 Geronimo webapp

:

은 기본적으로 내 로그인 단계는 제로니모 문서에서이 예와 매우 유사하다

  1. 이 때 사용자가 올바른 LDAP 그룹에있는 올바른 사용자 이름으로 로그인하면 사이트의 보안 영역으로 이동합니다. 세션이 끝날 때까지 사이트에서 사용자를 로그 아웃하는 방법을 모르겠습니다.

  2. 사용자가 LDAP 디렉토리에없는 사용자 이름/비밀번호로 로그인하면 사용자는 /auth/logonError.html?param=test로 리디렉션됩니다 (이 위치는 'web.xml ')

  3. 사용자가 적절한 그룹에없는 올바른 사용자 이름/암호로 로그인하면 "HTTP 403 금지 페이지"로 리디렉션됩니다. 이 페이지의 예가 LDAP 샘플의 맨 아래에 있습니다. 동작은 인증되지 않은 사용자와 동일해야합니다.

이러한 경우 모두 사용자가 브라우저를 다시 시작하거나 다른 브라우저를 사용할 때까지 로그인 프로세스를 다시 시도 할 방법이 없습니다. 이것은 내가 가지고있는 큰 문제입니다.

다음과 같은 시나리오가 발생하기를 바랍니다.

  1. 올바르게 인증 된 사용자는 로그 아웃하고 다시 로그인 할 수 있습니다.

  2. 부적절하게 인증 된 사용자는 로그인 화면으로 리디렉션되고 다시 시도하라는 메시지가 표시됩니다.

이 작업을 수행하려면 어떻게해야합니까? 당신의 도움을 주셔서 감사합니다.

답변

0

항상 그런 것은 아닙니다. 문제가 발생하여 며칠 동안 고민하고 마침내 StackOverflow (또는 어디서나)에 게시 한 다음 문제를 비교적 쉽게 해결할 수 있습니다.

문제를 해결 한 애플리케이션을 약간 변경했습니다. 나는 누구든지 비슷한 문제가있는 구글에서이 문제를 놓고 비틀어 버린 경우에 내가 한 일을 게시하고있다.

먼저 난 그냥이 한 (EndSessionServlet라고 함) 서블릿 생성 :

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    endSession(request, response); 
} 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    endSession(request, response); 
} 

private void endSession(HttpServletRequest request, HttpServletResponse response) throws IOException{ 
    request.getSession().invalidate(); 
    response.sendRedirect("."); 
} 

을 그리고 난 내 web.xml 파일이 추가 :

<error-page> 
<error-code>403</error-code> 
<location>/EndSessionServlet</location> 
</error-page> 

그리고 나는 또한 양식을 변경 -error-page in web.xml :

<login-config> 
<auth-method>FORM</auth-method> 
<realm-name>This is not used for FORM login</realm-name> 
<form-login-config> 
    <form-login-page>/login.jsp</form-login-page> 
    <form-error-page>/EndSessionServlet</form-error-page> 
</form-login-config> 
</login-config> 

그리고 EndSessionServlet에 인증 된 웹 페이지 섹션에 링크를 추가했습니다. 따라서 인증 된 사용자는 이제 제대로 로그 아웃 할 수 있습니다. 세 가지 시나리오

:

  1. 사용자가 정상적으로 로그인 할 수 있습니다, 사용자는 사용자가 LDAP에 대한 유효한 사용자 이름/암호를 입력
  2. 을 로그 아웃 EndSessionServlet 링크를 클릭하지만,하지 않을 올바른 그룹. 이 사용자는 일반적으로 403 페이지로 보내어 세션을 무효화하고 로그온 페이지로 리디렉션합니다.
  3. 사용자가 유효하지 않은 사용자 이름/암호를 입력하고로 전송되며 EndSessionServlet으로 설정됩니다. 이렇게하면 세션이 끝나고 로그인 페이지로 리디렉션됩니다.

이제 모든 시나리오가 올바르게 작동합니다.

관련 문제