0

我在我的 servlet 中使用(简单)基本身份验证,它适用于 Jetty 7.6 服务器,但使用 Tomcat 6.0.35 我在尝试发送未经授权的响应以在浏览器中显示用户名/密码表单时遇到错误:

java.lang.IllegalStateException
org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:421)

我的 servlet 中的代码如下所示:

response.setHeader("WWW-Authenticate", "Basic realm=\"" + realm + "\"");
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);

错误发生在代码示例的第二行。我没有在 web.xml 中使用 <security-constraint>。它应该是一个非常非常简单的身份验证。

知道为什么 Tomcat 不工作但 Jetty 可以吗?

4

1 回答 1

0

确保:

  1. 在 servlet 运行之前,您没有任何生成输出的过滤器
  2. 您只在请求期间调用 response.setStatus/response.sendError 一次
  3. 您没有刷新响应缓冲区

以上任何一项都可以在您预期之前提交响应。

于 2012-05-25T14:01:25.507 回答