2011-05-11 63 views
1

在我的项目中,我使用SSL,但它适用于所有页面。我只想将它用于登录页面,在该页面之后它应该恢复为HTTP协议。我怎样才能做到这一点?我发现了一种方法,但它不起作用。如何强制只使用SSL打开一个页面?

<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赫利俄斯和Tomcat 7.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。

+0

感谢您的有用答案。我想在登录后切换HTTP和HTTPS,因为我使用Primefaces及其某些组件(例如文件上载器)在HTTPS时发生错误。我不知道为什么,但它正在发生,为此我只想将SSL设置为登录页面。如果你可以帮助Primefaces的错误,当然这会很好。 – amrXX 2011-05-11 16:16:06

+0

问一个新问题或者向PrimeFaces报告此问题。 – BalusC 2011-05-11 16:27:52

相关问题