前一阵在搞一些服务器安全加固的需求,因为用到Jetty服务器,用户要求发送的cookie必须设置secure和httponly。从网上找了些资料,验证了半天,分享出来。
比较简单的方式是直接修改Jetty的配置文件,默认情况下Jetty安装后没有这个文件。
新建一个文件命名为jetty-web.xml,放到WEB-INF目录下,文件内容:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Get name="sessionHandler">
<Get name="sessionManager">
<Set name="secureCookies" type="boolean">true</Set>
<Set name="httpOnly" type="boolean">true</Set>
</Get>
</Get>
</Configure>
重启一下Jetty服务器就能够看到新的Cookie上带有secure和httponly的标志了。
简单解释一下工作原理,相关类的关系如下:
归根结底是要设置SessionManager的两个属性,通过类的关联关系可以找到对应的方法。同时,设置WebAppContext的工作由类JettyWebXmlConfiguration来实现,这个类会在WEB-INF目录下依次查找 jetty6-web.xml, jetty-web.xml 或者 web-jetty.xml配置文件。
除此之外,网上也有人尝试通过修改Java代码的方式实现此功能,但没有验证过