Java HTTP基本身份验证:Tomcat vs Jetty
我在servlet中使用(简单的)基本身份验证,它在Jetty 7.6服务器上运行良好,但在Tomcat 6.0.35中,我尝试发送未经授权的响应以在浏览器中显示用户名/密码表单时出错:Java HTTP基本身份验证:Tomcat vs Jetty,java,tomcat,jetty,basic-authentication,Java,Tomcat,Jetty,Basic Authentication,我在servlet中使用(简单的)基本身份验证,它在Jetty 7.6服务器上运行良好,但在Tomcat 6.0.35中,我尝试发送未经授权的响应以在浏览器中显示用户名/密码表单时出错: java.lang.IllegalStateException org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:421) 我的servlet中的代码如下所示: response.setHeader("WWW-
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中使用。它应该是一个非常非常简单的身份验证
知道为什么Tomcat不工作而Jetty工作吗?确保:
上述任何一项都可以在您期望响应之前提交响应。在响应之后和之前,您会做什么。sendError?您是否向servlet outputstream写入了一些内容?请发布任何与响应管理相关的代码。不,在这两行之前或之后都没有写入响应。我不明白为什么它在Jetty中有效而在Tomcat中无效。Thx.@chrise在servlet之前运行的任何过滤器呢?你能发布完整的堆栈跟踪吗?@Christopher Schultz:谢谢你的提示。在response.sendError调用之前提交了响应。Tomcat正在检查,但Jetty没有。我正在寻找整个堆栈跟踪。我的失误是,我调用了两次设置响应错误的方法,因此响应当然是提交的,第二次调用引发了异常。Jetty不在乎程序员的失败。因为这个问题没有有用的答案,我将删除它。谢谢你的提示,你们都走对了路。