2011-09-28 3 views
3

Tomcat 7에 대한 사용자 정의 영역을 작성했습니다. Tomcat의 기본 설치에서 제공하는 잠금 영역에 포장했습니다. 잠금 기능은 정상적으로 작동하지만 내 web.xml에는Tomcat에서 영역 인증 실패 이유를 감지하십시오.

<error-page> 
<error-code>403</error-code> 
<location>/forbidden.html</location> 
</error-page> 

이 있으며 페이지 인증을받지 않은 사용자를 안내합니다. 그러나 올바르게 잠겨있을 경우 인증 된 사용자를 페이지로 리디렉션합니다. 사용자가 잘못 인증하고 잠겨있을 때 차이를 감지 할 수 있습니까?

답변

2

보기가 쉽지 않습니다. 내 첫 번째 아이디어는 LockOutRealm을 서브 클래 싱하고 나중에 사용자 인터페이스로 인쇄 할 수있는 사용자가 잠긴 경우 요청 문맥에 무언가를 추가하는 것이 었습니다. 불행히도 authenticate methods of the LockOutRealm이 로그인과 패스워드를 받았기 때문에 요청이나 컨텍스트 객체가 없으므로 작동하지 않습니다.

또 다른 문제점은 인증이 실패했을 때 null을 반환하고 LockOutRealm도이를 수행한다는 것입니다. LockOutRealm의 동작과 인증에 실패한 경우 다른 영역의 동작간에 차이가 없습니다.

해결 방법 : 당신은 서블릿 3.0을 사용하여 login method of the HttpServletRequest interface를 사용하는 경우, 잠금 로직을 직접 구현하고 서블릿이 HttpServletRequest.login() 를 호출하기 전에 실패한 로그인 시도의 수를 확인합니다. 제한값보다 높으면 login()으로 전화하지 말고 사용자 정의 오류 메시지를 인쇄하십시오.

+1

고마워요! 해결 방법보다는 해결책이 있기를 바랬습니다. 그럼에도 불구하고 귀하의 답변은 높이 평가됩니다. – fidesachates

1

같은 질문이 있습니다. 요청 범위에 뭔가가있을 수 있습니다. Tomcat 5.5에서 사용했던 또 다른 잠금 영역에 대한 경험이 있고 요청 범위 "com.ofc.tomcat.LOGIN_FAILURE_MESSAGE"에 넣었을 것입니다. 존재하지 않는다면 사용자는 잠겨 있어야합니다.

1

이 스레드는 매우 오래된 것이고 가장 확실한 대답은 매우 지연되었습니다. 그러나 나는 위의 한 가지 방법을 열거 할 것이다. 실패 이유를 제공하는 인증 이후의 사용자 정의 메시지는 Tomcat에서 약간 복잡하지만 달성 될 수 있습니다. 이를 달성하기위한 방법 중 하나는 사용자 정의 Tomcat 밸브를 구성하여 적절한 수준 (호스트, 엔진 또는 컨텍스트)에 추가하는 것입니다. 웹 응용 프로그램에서 FORM 인증을 사용하는 경우 Tomcat은 자동으로 FormAuthentication Valve를 처리 파이프 라인에 삽입합니다. 아이디어는 브라우저에서 'j_security_check'작업을 가로 채고 FormAuthentication Valve로 시작하기 전에 사전 검증을 수행하는 것입니다. 'invoke'메소드에서 사용자 이름 ('j_username')과 암호 ('j_password')는 모두 요청 텍스트에서 일반 텍스트로 사용할 수 있습니다. 이를 통해 계정이 잠겨 있는지 여부 또는 사용자가 직접 영역 (데이터베이스 또는 LDAP 등)으로 이동하여 암호 등을 변경해야하는지 여부를 확인할 수 있습니다. 이 밸브에서 response.redirect()를 적절한 오류 페이지로 보낼 수 있습니다.