在我的项目中,我使用的是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。
感谢。
答案 0 :(得分:1)
那是不可能的。当会话由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以进行session fixation黑客攻击。通过HTTPS登录,您只能阻止黑客了解实际的用户名/密码,但是一旦黑客在cookie中识别会话ID,就不再有任何意义了。
我会说,忘记切换并在登录后始终坚持使用HTTPS。