如何强制仅使用SSL打开一个页面



在我的项目中,我使用的是SSL,但它适用于所有页面。我只想将其用于登录页面,在该页面之后它应该恢复为 HTTP 协议。我该怎么做?我在下面找到了一种方法,但它不起作用。

    <security-constraint>
    <web-resource-collection>
        <web-resource-name>Notify page, accessed internally by application</web-resource-name>
        <url-pattern>/Login.xhtml</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
<security-constraint>
    <web-resource-collection>
        <web-resource-name>Entire Site</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>NONE</transport-guarantee>
    </user-data-constraint>
</security-constraint>

我的项目是一个JSF 2.0项目,我正在使用Eclipse Helios和Tomcat 7.0。

谢谢。

这是不可能的。当会话由 HTTPS 请求创建时,它不适用于 HTTP 请求。最好的办法是在登录期间自己创建一个不安全的cookie,并以此维护登录。

Map<String, Object> properties = new HashMap<String, Object>();
properties.put("secure", false);
externalContext.addResponseCookie(name, value, properties);

但是再想一想,HTTPS登录的意义何在呢?如果您在 HTTPS 之后返回 HTTP,并且希望保持用户登录状态,则需要将会话 Cookie 设置为不安全。这样,黑客仍然可以嗅探cookie中的会话ID以进行会话固定黑客攻击。通过HTTPS登录,您只能防止黑客了解实际的用户名/密码,但是一旦黑客在cookie中计算出会话ID,这就不再有意义了。

我会说,忘记开关并在登录后一直坚持使用HTTPS。

相关内容

  • 没有找到相关文章