【问题标题】:is it possible to check the authentication status of an HTTP post request before getting the response?是否可以在获得响应之前检查 HTTP 发布请求的身份验证状态?
【发布时间】:2013-07-26 15:55:41
【问题描述】:

我正在使用 java.net.HttpURLConnection。

我首先将 post 请求的主体写入与 URLConnection 对象关联的 OutputStream。

完成后,我关闭 OutputStream,然后调用 getInputStream() 或 getResponseCode() 或 getHeaderFields()。那时我会发现所提供的凭据是否被视为有效。

这是有问题的,因为如果用户凭据因某种原因被拒绝,我不想再次发出相同的发布请求(并且必须重新上传其内容,其中可能包括大文件)。

如果在调用 getResponseCode() 或 getHeaderFields() 之后尝试调用 getOutputStream() 会引发异常,我如何确保在尝试上传数据之前接受用户凭据?

有没有办法解决这个问题,还是只是服务器的配置方式?

【问题讨论】:

  • 你没有;基本身份验证是无状态的,要求凭据与请求一起发送。您必须编写一个具有单独身份验证和会话管理的 Web 服务。

标签: java post httprequest urlconnection


【解决方案1】:

简短的回答是:你不能那样做。

基本身份验证是无状态的。当您执行 POST/PUT 时,用户凭据将作为该 HTTP 请求的标头发送。在整个操作完成之前(即在您发送数据有效负载之后),它们才会被处理。

为了执行您所说的操作,您需要编写一个 Web 服务,通过会话管理分别管理登录和文件/数据上传,允许您首先进行身份验证(返回某种会话令牌)然后通过单独的 HTTP 请求发送数据。

编辑添加:实际上,您可以通过简单地对也需要身份验证的东西执行 GET 来解决这个问题。如果它成功,您知道 POST 也将成功,在两个请求之间显示服务器端无效的凭据。我不建议这样做,但它会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2021-09-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2017-12-09
    • 1970-01-01
    相关资源
    最近更新 更多