gpt4 book ai didi

Java servlet 重定向并出现状态 401 问题

转载 作者:行者123 更新时间:2023-12-02 06:24:44 24 4
gpt4 key购买 nike

我在 Java servlet 中遇到重定向问题。我想使用状态 401(未验证)而不是 302。

假设我有一个 protected 资源,其 Url 为“/protected”。此 URL 映射到 ProtectedServlet。在 ProtectedServlet 的 doGet 中,我将检查请求是否经过身份验证,如果没有,servlet 会将请求重定向到登录页面。这是我的代码:

ProtectedServlet.java

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException {

boolean isAuth = this.checkAuth();

if (isAuth == false) {

// WAY1
resp.setStatus(401);
resp.sendRedirect(resp.encodeRedirectURL(loginUrl));

// WAY2
resp.setStatus(401);
resp.setHeader("Location", resp.encodeRedirectURL(loginUrl));
}
}

结果

  1. 如果我使用“WAY1”,当我请求“/protected”时,我将看到登录页面但返回 Status 是 302,而不是我预期的 401。

  2. 如果使用 WAY2:当我请求“/protected”时,我将看不到登录页。我看到返回的空页面没有任何状态。

有人知道我错了吗?谢谢。

最佳答案

HTTP 协议(protocol)定义明确。客户端发送 HTTP 请求,服务器发回 HTTP 响应。

HTTP 响应只能有一个状态代码。您可以看到您的选项here 。换句话说,您无法通过发送 401 来进行重定向。您可以在 401 响应中添加 Location header ,但您必须告诉客户如何处理它,因为它不是“t标准。

如果您的用户未经过身份验证,则返回 401 并呈现相同的登录页面 HTML,而不是重定向,即。对登录 jsp 执行 RequestDispatcher#forward(..)

关于Java servlet 重定向并出现状态 401 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com