【问题标题】:Losing request attributes when redirecting to HTTPS重定向到 HTTPS 时丢失请求属性
【发布时间】:2012-10-26 13:26:37
【问题描述】:

我正在尝试在 Tomcat 上通过 SSL 实现登录。 登录 servlet 称为 IniciarSesion,因此我在 web.xml 中添加以下内容:

<security-constraint>
            <web-resource-collection>
                <web-resource-name>Seguridad en Acceso</web-resource-name>
                 <url-pattern>/IniciarSesion</url-pattern>
            </web-resource-collection>
            <user-data-constraint>
             <transport-guarantee>CONFIDENTIAL</transport-guarantee>
            </user-data-constraint>
</security-constraint>

现在的问题是,当我尝试通过以下方式获取输入密码时:

String nick=(String)req.getParameter("login");

返回null,从http重定向到https时请求参数丢失。

我该如何解决这个问题?

【问题讨论】:

  • SSL 与登录无关。这是关于保护传输层的。
  • @Tichodroma 您可以使用 SSL 证书和/或公钥来验证用户身份
  • @memosdp 是的,但这不是 OP 想要做的。
  • @Tichodroma 我不是为 OP 而是为你说的
  • 我认为这很明显......用户通过http连接并且服务器重定向到https,然后重置环境。只需以某种方式将用户数据保存在缓存中,然后在 ssl 会话中传递它们

标签: java http tomcat servlets ssl


【解决方案1】:

听起来好像您的登录页面(其中定义了“登录”)没有受到保护。当它通过 HTTP 访问您的 /iniciarSesion servlet 时,tomcat 对 SSL 站点执行 HTTP REDIRECT。真正的重定向不会保留最初发送到服务器的数据,因此您会丢失数据。我的建议是将您的登录页面包含在 CONFIDENTIAL 范围内。

【讨论】:

  • 是的,但登录页面是主页(您在标题上有表单),我不想保护所有网站
  • 如果您通过 HTTP 发布到您的 servlet,那么您将使用它发送数据。简单地将该指令添加到您的 web.xml 并不能保护您免于以纯文本形式发送凭据。为了保护它,您别无选择,只能让客户端将数据发布到 https url。您可以使用最初生成 HTTP 页面的请求和响应对象中的一些数据相当容易地获得完全限定的路径(或者只是对其进行硬编码)。
【解决方案2】:

SSL 的全部意义在于确保传输安全。如果您首先通过 http 发送登录凭据,那么重定向到 https 是没有意义的,因为您已经“以明文方式”发送了信息。您所做的是将您的登录表单发布到 https URL,或者通过显式设置表单 url,或者通过 https 加载您的登录页面。这将涉及将登录页面添加为受保护的资源,就像您的登录 servlet 一样。

【讨论】:

  • 好的,在将表单发布到 https URL 之前,我希望有一个解决方案。现在问题将是处理 Servlet 上下文 blabla ..
猜你喜欢
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2015-03-02
  • 2019-01-08
  • 1970-01-01
  • 2016-10-23
相关资源
最近更新 更多