Java embedded jetty正在接受HTTP TRACE方法 [英] Java embedded jetty is accepting HTTP TRACE method
问题描述
我正在尝试在嵌入式Jetty中禁用HTTP TRACE方法。在Jetty doc中,默认情况下禁用HTTP跟踪,但对于嵌入式,它仍然是启用的。我试图将trace作为安全约束禁用,就像在jetty.xml中一样。
I'm trying to disable HTTP TRACE method in embedded Jetty. In Jetty doc's is info that HTTP trace is disabled by default, but for embedded it is still enabled. I was trying to disable trace as a security constraint as is done in jetty.xml.
ServletContextHandler servletHandler = new ServletContextHandler(ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY);
servletHandler.setClassLoader(Server.class.getClassLoader());
servletHandler.setContextPath("/");
servletHandler.addEventListener(new ContextLoaderListener());
servletHandler.addServlet(new ServletHolder(new CXFServlet()), "/*");
servletHandler.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName());
servletHandler.setInitParameter("contextConfigLocation", BeansConfig.class.getName());
servletHandler.setInitParameter("javax.ws.rs.Application", DispatcherConfig.class.getName());
/*
* <security-constraint>
* <web-resource-collection>
* <web-resource-name>Disable TRACE</web-resource-name>
* <url-pattern>/</url-pattern>
* <http-method>TRACE</http-method>
* </web-resource-collection>
* <auth-constraint/>
* </security-constraint>
*/
Constraint constraint = new Constraint();
constraint.setName("Disable TRACE");
ConstraintMapping mapping = new ConstraintMapping();
mapping.setConstraint(constraint);
mapping.setMethod("TRACE");
mapping.setPathSpec("/"); // this did not work same this mapping.setPathSpec("/*");
ConstraintSecurityHandler securityHandler = (ConstraintSecurityHandler) servletHandler.getSecurityHandler();
securityHandler.addConstraintMapping(mapping);
soapUI的输出示例:
Example output from soapUI:
HTTP/1.1 200 OK
Content-Type: message/http
Content-Length: 143
Server: Jetty(9.0.6.v20130930)
TRACE / HTTP/1.1
Connection: keep-alive
User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
Host: 192.168.33.115
Accept-Encoding: gzip,deflate
推荐答案
在你的 Constraint
对象,你需要调用 setAuthenticate(true)
,并确保你不要调用 setRoles(字符串[])
。这使它相当于< security-constraint>
,其中包含空< auth-constraint>
,其中禁止访问。
On your Constraint
object, you need to call setAuthenticate(true)
, and ensure that you don't call setRoles(String[])
. This makes it the equivalent of a <security-constraint>
with an empty <auth-constraint>
, which forbids access.
它与 DefaultServlet
一起工作的原因,而不是 CXFServlet
是因为 DefaultServlet
特别拒绝访问TRACE方法。
The reason it works with the DefaultServlet
and not the CXFServlet
is because the DefaultServlet
specifically denies access to the TRACE method.
这篇关于Java embedded jetty正在接受HTTP TRACE方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!