前一阵在搞一些服务器安全加固的需求,因为用到Jetty服务器,用户要求发送的cookie必须设置secure和httponly。从网上找了些资料,验证了半天,分享出来。

比较简单的方式是直接修改Jetty的配置文件,默认情况下Jetty安装后没有这个文件。

新建一个文件命名为jetty-web.xml,放到WEB-INF目录下,文件内容:

  1. <?xml version="1.0"  encoding="ISO-8859-1"?>  
  2. <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">  
  3.   
  4. <Configure class="org.eclipse.jetty.webapp.WebAppContext">  
  5.     <Get name="sessionHandler">  
  6.         <Get name="sessionManager">  
  7.             <Set name="secureCookies" type="boolean">true</Set>  
  8.             <Set name="httpOnly" type="boolean">true</Set>  
  9.         </Get>  
  10.     </Get>  
  11. </Configure>  
重启一下Jetty服务器就能够看到新的Cookie上带有secure和httponly的标志了。

简单解释一下工作原理,相关类的关系如下:


归根结底是要设置SessionManager的两个属性,通过类的关联关系可以找到对应的方法。同时,设置WebAppContext的工作由类JettyWebXmlConfiguration来实现,这个类会在WEB-INF目录下依次查找 jetty6-web.xml, jetty-web.xml 或者 web-jetty.xml配置文件。


除此之外,网上也有人尝试通过修改Java代码的方式实现此功能,但没有验证过


Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐