2010-06-26 2 views
1

이것은 나를 괴롭 히고 있습니다.Tomcat FORM 인증 - 로그인 양식이 https로 나오지 않습니다.

저는 폼 기반의 선언적 인증 인 Tomcat 6을 사용하고 있습니다. 관련된 프레임 워크가 없습니다. 모든 것이 정상적으로 작동합니다 - 일부 페이지는 인증되었거나 그렇지 않은 페이지, 일부는 https, 일부 http는 사용합니다. 내가 원하는대로 다. 예외 ...

로그인 페이지에 항상 https를 사용하고 싶습니다.

다음과 같은 경우 로그인 페이지가 https로 멋지게 나타납니다. a) 브라우저에서 직접 이동합니다. b) https에 대해 구성되어 있고 인증이 필요한 응용 프로그램의 페이지를 클릭합니다.

그러나 로그인 페이지는 다음과 같은 경우 http로 표시됩니다. a) http로 구성되어 있고 인증이 필요한 페이지를 클릭합니다.

저는 여기에 허용되는 일종의 거부감이 있으며 "https가 아닌 페이지로 이동하려면 왜 https 로그인을 원하겠습니까?"라고 대답 할 수 있습니다. 해당 내용 : a) 암호를 암호화하고 싶습니다. b) 웹 사이트의 일부를 활성화/비활성화하기 위해 사용자가 로그인하여 자신이 속한 역할 (그룹)을 표시하도록합니다. c) 절대적으로 필요한 경우를 제외하고는 https로 인해 성능이 저하되기를 원하지 않습니다.

로그인 페이지가 https (내가 원하는 것처럼)가되어야한다면 https에 다시 넣을 수있는 메커니즘이 있어야합니다.

누구나이 전체 영역에서 몇 가지 지침/아이디어를 갖고 있다면 매우 좋을 것입니다.

web.xml의 조각 :

<security-constraint> 
    <display-name>Security Constraint A0S1</display-name> 
    <web-resource-collection> 
     <web-resource-name>A0S1</web-resource-name> 
     <url-pattern>/login/*</url-pattern> 
    </web-resource-collection> 

    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint>  
</security-constraint> 

<login-config> 
    <auth-method>FORM</auth-method> 
    <form-login-config> 
     <form-login-page>/login/form_login.jsp</form-login-page> 
     <form-error-page>/login/error.jsp</form-error-page> 
    </form-login-config> 
</login-config> 
+0

의 web.xml : <보안 제약 조건> <표시 이름> 초 <웹 자원 수집> <웹 자원 이름> A0S /로그인/* <사용자 데이터 제약 조건> <수송 보장> 기밀 FORM /login/error.jsp -login-config> user373009

답변

0

이 로그인 페이지를 보장 관하여이었다 인증을 요구하는 페이지가 web.xml의 기밀 설정되지 않은 HTTPS 경우에도입니다.

web.xml 기밀 설정에 의존하지 않고 https (또는 http)로 전환 할 수있는 작은 서블릿을 작성했습니다. 기밀 설정은 로그인이나 다른 서블릿을 통해 JSP 페이지에 도착하면 작동하지 않습니다.

이제 https로 실제 로그인 페이지에 인수 커플 (URL + 원하는 프로토콜 HTTP/HTTPS)을 소요하고 리디렉션 서블릿 (SSLSwitch)에 web.xml의 점에서 FORM 인증을위한 설정 : /SSLSwitch?the_url=/login/form_login.jsp & the_target = https; /login/error.jsp

SSLSwitch 서블릿 활성 코드 단편 문자열의 contextPath request.getContextPath =(); String encodedUrl = response.encodeURL (contextPath + url); 문자열 fullUrl = target_domain + encodedUrl; response.sendRedirect (fullUrl);

jsp 로그인 페이지 자체는 일반적인 FORM 로그인 규칙 (action = "j_security_check")을 따르고 ok로 로그인 한 후에 요청 된 페이지로 끝납니다.

이제 https에서 http로 전환 한 후 세션 보안을 개선하기 위해 수행 할 수있는 작업에 대해 알아볼 필요가 있습니다. 세션 중에 사용자의 IP가 변경되지 않았는지 확인하는 필터 일 수 있습니다.

스티븐.