第 1 步:假设您知道如何创建一个 Rest Service 应用程序并且您有一个这样的类
public class App extends javax.ws.rs.core.Application{...//set a list of services here using
@Override
public Set<Object> getSingletons(){
final Set<Object> objects=new HashSet<>();
objects.add(new MyService()));
return objects;
}
}
第 2 步: 创建一个标准的过滤器类。这里没什么特别的。
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(servletRequest,servletResponse);
}
// overwrite doInit ass well
}
第 3 步:部署它
FilterInfo filterInfo = new FilterInfo("MyFilter", MyFilter.class);
ResteasyDeployment deployment = new ResteasyDeployment();
deployment.setApplication(new App());
UndertowJaxrsServer restServer = new UndertowJaxrsServer();
DeploymentInfo deploymentWrapper = restServer.undertowDeployment(deployment);
deploymentWrapper.setDeploymentName("mysite.myext");
deploymentWrapper.setClassLoader(this.getClass().getClassLoader());
deploymentWrapper.setContextPath("/");
deploymentWrapper.addFilter(filterInfo);
deploymentWrapper.addFilterServletNameMapping("MyFilter","ResteasyServlet", DispatcherType.REQUEST);//Name of servlet is hardcoded in UndertowJaxrsServer class
try {
Undertow.Builder restServerBuilder = Undertow.builder()
.addHttpListener(8080, "0.0.0.0").setWorkerThreads(200);
restServer.start(restServerBuilder);
restServer.deploy(deploymentWrapper);
} catch (Exception ex) {
logger.error("We got a problem {}", ExceptionUtils.getRootCauseMessage(ex),ex);
throw ex;
}