2010-06-26 85 views
1

这使我发疯。Tomcat FORM身份验证 - 登录表单不会显示为https

我正在使用Tomcat 6,声明身份验证,基于窗体。没有涉及的框架。 一切工作正常 - 一些页面进行身份验证,一些没有,一些使用https,一些http。一切都如我所愿。除...

我希望登录页面始终使用https。

登录页面很好地显示为https,如果: a)我直接在浏览器中访问它。 b)我点击配置为https的应用程序中的页面(并且需要验证)。

但是登录页面出现为http,如果: a)我点击为http配置的应用程序中的一个页面(并且需要验证)。

我有一种感觉,我反对某种接受的默认在这里,答案可能是“你为什么要https登录到非https页面?”。 它是这样的: a)我想要密码被加密。 b)我希望用户登录以显示它们属于哪个角色(组),以启用/禁用部分网站。 c)除了绝对必要的地方,我不希望由于https导致性能下降。

我猜如果登录页面被强制为https(就像我想要的那样),那么必须有一种机制将其返回到http。

如果有人对这个整个区域有一些指示/想法,我会非常感激。

的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/form_login.jsp /login/error.jsp user373009 2010-06-26 17:00:03

回答

0

这是关于确保登录页面是HTTPS即使需要身份验证的页面没有被设置在web.xml保密。

我已经写了一个小servlet,允许我切换到https(或http),而不是依赖于web.xml CONFIDENTIAL配置设置。当您通过登录或通过另一个servlet到达jsp页面时,CONFIDENTIAL设置似乎不起作用。

所以,现在的配置为在web.xml中指向一个servlet(SSLSwitch)形式的认证,这需要几个参数(URL +所需的协议HTTP/HTTPS),并重定向到实际的登录页面,以https: /SSLSwitch?the_url=/login/form_login.jsp & the_target = https; /login/error.jsp

SSLSwitch Servlet的活性的代码片段: 字符串的contextPath = request.getContextPath(); String encodedUrl = response.encodeURL(contextPath + url); String fullUrl = target_domain + encodedUrl; response.sendRedirect(fullUrl);

jsp登录页面本身遵循通常的FORM登录规则(action =“j_security_check”),并且在登录成功后您在请求的页面上结束。

我现在需要看看在从https切换到http后,如何提高会话安全性。也许过滤器来检查用户的IP在会话期间不会改变。

Steven。