2011-04-04 139 views
3

如何将Servlet配置为仅对登录页面使用SSL,然后将普通HTTP用于其他应用程序。 如果我为需要使用SSL的登录页面设置特殊功能,而对于其他页面使用特殊设置,并且我使用表单身份验证并指向我之前配置的使用SSL的登录页面,当用户请求受保护的页面时, Bar中的URL不是login.page,它是请求的页面,但正文是登录表单,我可以在不使用HTTPS的情况下登录。 谢谢..限制SSL仅用于登录页面

+0

好问题,我的文章(仍未回复)可能对你有用(声明性安全)http://stackoverflow.com/questions/5442381/how-do-i-know-whether-httpservletrequest-is-subject-to - 安全约束或-N – Osw 2011-04-12 20:05:23

+0

http://stackoverflow.com/questions/4398951/force-ssl-https-using-htaccess-and-mod-rewrite 享受它! – saurabh 2011-10-13 11:39:09

回答

0

ServletRequest有一个方法来确定请求是否在安全通道上进行。您的登录页面可以检查该值并重定向到https URL。

http://download.oracle.com/javaee/5/api/javax/servlet/ServletRequest.html#isSecure%28%29

+0

OP并没有真正要求如何区分SSL和非SSL请求。 OP在询问如何配置web应用程序,使得只有登录页面使用SSL。 – BalusC 2011-04-04 21:26:05

+0

这不能用声明式安全来完成吗?不是程序安全。 – 2011-04-05 06:56:10

4

我很抱歉地说,但似乎你想要做的事是错误的。为什么在用户登录后需要https,是否没有它,会话可能会被轻易劫持,因为会话cookie在纯文本中可见。当然,我们需要在同一个网络中,或者甚至可能是恶搞IP地址,但是有了这么多的WiFi网络,它实际上是小菜一碟(因为大多数用户并不真正知道如何保护它们)。

因此,除非您在控制环境中部署您的应用程序(仅限局域网,有限数量的用户 - 但为什么您在这种情况下需要SSL?),您可能需要始终使用https。

+0

你好,谢谢你的回复。我不需要https登录后,我需要用户登录时,以保护密码。但正如我在问题中所说的,当直接请求登录页面时,服务器需要https,请求页面时,我被重定向到登录页面,但我可以不使用HTTPS登录,我希望登录页面使用HTTPS,并且用户登录后没有HTTPS。 – 2011-04-05 06:37:05

0

我们有同样的要求 - 我们绝对必须已登录加密,因为正在发送的密码,但我们不想通信的加密其余监守它是计算密集型的。

的Tomcat 7 SSL配置如何,为了清楚地说:

“这绝对需要一个安全连接的任何页面应该检查与页面请求相关联的协议类型,如果不指定HTTPS时采取适当的行动。 “

这意味着将未加密的登录请求重定向到安全的URL的责任完全在于登录页面本身。 Tomcat中没有管理方法来配置servlet的外部。倒霉。 因此,我们必须从应用程序供应商处请求此功能,因为它是商业软件包。

作为一种粗略的解决方法,第二个要求的妥协方法是在端口8443(例如)上启用HTTPS连接器后,在端口8080上禁用常规HTTP连接器。