2012-05-24 28 views
0

我在我的servlet中使用了一個(簡單的)基本認證,它適用於Jetty 7.6服務器,但是使用Tomcat 6.0.35我在嘗試發送未經授權的響應時收到錯誤顯示在瀏覽器中的用戶名/密碼形式:HTTP基本認證:Tomcat vs Jetty

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不工作,但碼頭呢?

+0

在response.sendError之後,你會做什麼?你寫了什麼給servlet輸出流?請發佈與您的回覆管理相關的任何代碼。 –

+0

不,在這兩行之前或之後沒有寫入響應。我很困惑爲什麼它可以在Jetty中工作,但不在Tomcat中。謝謝。 – chrise

+0

@chrise在servlet之前可能運行的任何過濾器怎麼樣?你可以發佈完整的堆棧跟蹤嗎? –

回答

0

確保:

  1. 你沒有那個正在生產輸出的任何過濾你的servlet運行
  2. 你只調用response.setStatus/response.sendError請求
  3. 您AREN在之前的一次不清空響應緩衝區

以上任何一項都可以在您期待之前提交響應。