![](/img/trans.png)
[英]Struts 2 and making JSESSIONID cookie HttpOnly on Tomcat 6, Java 6
[英]Setting httponly in JSESSIONID cookie (Java EE 5)
我正在嘗試在JSESSIONID cookie上設置httponly標志。 但是,我在Java EE 5中工作,不能使用setHttpOnly()
。 首先,我嘗試使用response.setHeader()
從servlet的doPost()
創建自己的JSESSIONID cookie。
當這不起作用時,我嘗試了response.addHeader()
。 那也行不通。 然后,我了解到servlet處理將會話轉換為JSESSIONID cookie並將其插入http頭中,因此如果我想使用該cookie,我將不得不編寫一個過濾器。 我寫了一個過濾器並在setHeader()
玩setHeader()
/ addHeader()
,再次無濟於事。
然后,我了解到響應對象在進入過濾器之前會有一些刷新/關閉動作,所以如果我想操縱數據,我需要擴展HttpServletResponseWrapper
並將其傳遞給filterChain.doFilter()
。 這已經完成,但我仍然沒有得到結果。 顯然我做錯了但我不知道是什么。
我不確定這與手頭的問題是否完全相關,但servlet沒有將任何html文檔返回給瀏覽器。 所有真正發生的事情是正在填充一些對象並將其返回到JSP文檔。 我有點假設Session對象被轉換為JSESSIONID cookie,並在發送到瀏覽器之前將其與添加到請求中的對象一起包裝在http標頭中。
我很樂意發布一些代碼,但我想排除我的困難源於對該理論的誤解的可能性。
由於JSESSIONID
cookie由servletcontainer管理,因此該設置是特定於servletcontainer的。 目前還不清楚你正在使用哪一個,所以這里是一個Apache Tomcat 6.0目標答案,這樣你就知道你需要在哪個方向尋找你的servletcontainer:你需要將webapplication的<Context>
元素的useHttpOnly
屬性設置為true
。
<Context useHttpOnly="true">
...
</Context>
另請參閱有關<Context>
元素的Tomcat文檔 。
您可以在Java EE 5中使用它:
對於Java EE 6之前的Java Enterprise Edition版本,常見的解決方法是使用顯式附加HttpOnly標志的會話cookie值覆蓋SET-COOKIE http響應頭:
String sessionid = request.getSession().getId();
// be careful overwriting: JSESSIONID may have been set with other flags
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");
資料來源: https : //www.owasp.org/index.php/HttpOnly
我把它測試成一個過濾器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.