Tag: embedded jetty

仅使用带有HTTPS的嵌入式Jetty 9

我正在使用嵌入式Jetty 9,我想允许https访问,但没有http。 我知道我可以在Jetty web.xml中轻松配置重定向,但我在嵌入式版本中没有该文件。 我知道我可以使用任何文件并从嵌入式版本指向它,但这应该更容易。 所以我在这里搜索并发现了这个http://blog.anvard.org/articles/2013/10/05/jetty-ssl-server.html其中作者声明“当然,我们可以强制使用HTTP / S只需删除HTTP连接器。“ 所以我做到了这一点: Server server = new Server(); SslContextFactory sslContextFactory = new SslContextFactory(); sslContextFactory.setKeyStorePath(keystoreFile.getAbsolutePath()); sslContextFactory.setKeyStorePassword(Keys.DOMAIN_CERTIFICATE_JKS_KEYSTORE_PASSWORD); sslContextFactory.setKeyManagerPassword(Keys.DOMAIN_CERTIFICATE_KEY_MANAGER_PASSWORD); HttpConfiguration httpsConfiguration = new HttpConfiguration(); SecureRequestCustomizer secureRequestCustomizer = new SecureRequestCustomizer(); httpsConfiguration.addCustomizer(secureRequestCustomizer); ServerConnector serverConnector = new ServerConnector(server, new SslConnectionFactory(sslContextFactory, HttpVersion.HTTP_1_1.asString()), new HttpConnectionFactory(httpsConfiguration)); serverConnector.setHost(“192.168.0.5”); serverConnector.setPort(9443); serverConnector.setIdleTimeout(15000); server.setConnectors(new Connector[] { serverConnector }); 问题:它似乎不起作用。 https运行正常,但是当我访问http时,我在主体中得到200 OK响应(而不是预期的json响应)。 所以服务器似乎处理请求,但加密错误,无论如何。 […]

Keycloak注销不会结束会话

我在使用Spring Framework的Java应用程序中使用Keycloak 3.4,使用Keycloak Jetty-81-Adapter 3.4在Jetty 8.1中使用。 根据Keycloak文档,我应该能够在Java EE应用程序中使用HttpServletRequest从Keycloak注销。 但是,即使Jetty支持HttpServletRequests,这在我的情况下也不起作用。 您可以通过多种方式注销Web应用程序。 对于Java EE servlet容器,可以调用HttpServletRequest.logout().. 如果我尝试以这种方式注销,我会被重定向到keycloak(登录屏幕,可以选择多个域登录)。 但是当我选择我喜欢的领域时,我会立即再次登录到webapplication,而无需提供任何凭据。 我尝试了替代方法,重定向到Keycloak: 对于其他浏览器应用程序,您可以将浏览器重定向到 http:// auth-server / auth / realms / {realm-name} / protocol / openid-connect / logout?redirect_uri = encodedRedirectUri 但是它会在Keycloak日志中抛出连接拒绝错误,因为Keycloak试图直接调用我的webapp。 它对保持活动状态的Keycloak会话没有影响。 我强烈建议不要直接从Keycloak到webapp进行必要的服务器端调用。 为什么HttpServletRequest.logout()在我的情况下不破坏keycloak会话的任何建议? HttpServletRequest的Jetty实现是否与Java EE实现完全不同,它根本无法工作?

从Java中的HTTP POST请求中读取JSON消息

我是Java和客户端 – 服务器编程的新手。 我正在使用嵌入式Jetty,我正在尝试将JSON字符串发送到某个地址( http:// localhost:7070 / json ),然后在该地址中显示JSON字符串。 我尝试了以下代码,但我得到的只是null。 嵌入式Jetty代码: public static void main(String[] args) throws Exception { Server server = new Server(7070); ServletContextHandler handler = new ServletContextHandler(server, “/json”); handler.addServlet(ExampleServlet.class, “/”); server.start(); } 用于发送Http POST的客户端function: public static void sendHttp(){ HttpClient httpClient = HttpClientBuilder.create().build(); //Use this instead try { HttpPost request = new HttpPost(“http://localhost:7070/json”); JSONObject […]

如何使用Jersey 2.5将参数传递给REST资源

我有一个服务于我的客户端的Java服务器(非应用程序服务器)。 现在我有兴趣添加REST支持。 我初始化了Jetty服务器并创建了一些REST资源。 我的问题是: 如何在创建REST资源时传递参数? 通常我更喜欢每个资源的构造函数,但我不控制它。 我知道有一种方法可以注入依赖项。 如何使用Jersey 2.5? 谢谢!

Embedded Jetty 9一次处理一个请求

我在嵌入模式下使用jetty 9,即使我给了一个500的threadpool ,服务器仍然只是一次处理一个请求。 我错过了什么? JAVA代码: //这里我希望所有线程名称日志能够即时打印,但它们会逐个打印 public class Main { public static void main(String[] arg) throws Exception { ExecutorThreadPool executorThreadPool = new ExecutorThreadPool(Executors.newFixedThreadPool(500)); final Server server = new Server(executorThreadPool); final ServerConnector connector0 = new ServerConnector(server); connector0.addBean(executorThreadPool); connector0.setPort(8080); server.setHandler(new HelloHandler()); server.setConnectors(new Connector[] {connector0}); server.setDumpAfterStart(true); server.start(); server.join(); } } class HelloHandler extends AbstractHandler { public void handle(String […]

如何使用嵌入式jetty v 9.1.0设置端口和线程池

我正在使用jetty 9.1.0,嵌入式,并且想要设置端口和ThreadPool。 我看到每个的构造函数,但是看不到如何使用其中一个,然后以任何方式设置另一个。 这样做 Server server = new Server(9090); 要么 Server server = new Server(new QueuedThreadPool(100, 10)); 但是服务器上没有setPort或setThreadPool。

使用嵌入式Jetty 7发布JAX-WS端点

任何人都可以帮忙吗? 我想使用嵌入式Jetty 7作为端点。 这是我试过的: public class MiniTestJetty { @WebService(targetNamespace = “http”) public static class Calculator { @Resource WebServiceContext context; public int add(int a, int b) { return a + b; } } public static void main(String[] args) throws Exception { int port = 8080; Server server = new Server(port); Calculator calculator = new Calculator(); Endpoint.publish(“http://localhost:” […]

在Jetty服务器中,如何获取需要客户端身份validation时使用的客户端证书?

设置一个请求客户端身份validation的嵌入式Jetty服务器非常容易:只需要添加语句SslContextFactory.setNeedClientAuth(true); 配置服务器时的ssl上下文。 在服务器的信任库中拥有其证书的任何客户端都将能够与服务器建立TLS连接。 但是,我需要知道所有可能的可信客户端的哪个客户端正在发出请求; 换句话说,我需要知道此连接中使用的客户端证书,特别是在处理程序中。 有谁知道如何访问此证书或甚至可能?

带有爆炸战的嵌入式Jetty,使用带注释的配置

我正在学习Java EE 7 Servlets并尝试使用嵌入式Jetty(v 9.3.7)从Java EE 7教程部署hello2 示例 ,但收效甚微。 hello2由两个servlet和一个图像文件组成。 配置已注释,项目没有任何web.xml。 在嵌入式Jetty 示例的WebAppContext部分之后,我创建了这个主类来启动我的嵌入式服务器: public class MyServer { public static void main(String[] args) throws Exception { Server server = new Server(8080); String webappPath = new File(MyServer.class.getProtectionDomain().getCodeSource().getLocation().getFile()) .getParentFile().getParentFile().getAbsolutePath(); WebAppContext webapp = new WebAppContext(webappPath, “”); webapp.setConfigurations(new Configuration[]{ new AnnotationConfiguration()}); server.setHandler(webapp); server.start(); server.join(); } } 据我所知,由于Jetty是一个Java EE Web容器,它应该能够按原样提供示例Serlvet项目,我只需要指向war文件夹结构。 以下是项目的结构: […]

嵌入式Jetty处理url以提供内容

我正在使用嵌入式Jetty和Guice,我想知道处理我的单页应用程序的最佳方法。 我希望Jetty能够处理这样的请求(优先顺序): /socket必须由websocket servlet处理 /fs/read/* ,与此url匹配的任何内容我需要由自定义servlet处理 /* ,任何与此url匹配的内容都应该从我的Java应用程序的类路径上的/web提供,假设它不是由上面的处理。 如果资源不存在,则它提供/web/index.html 现在我想知道处理这个问题的最佳方法吗? 使用REST框架似乎很苛刻,因为我没有任何rest服务。 目前我正在设置Jetty: ServletHolder servletHolder = new ServletHolder(DefaultServlet.class); ServletContextHandler servletContextHandler = new ServletContextHandler(server, “/”, ServletContextHandler.SESSIONS); servletContextHandler.addFilter(GuiceFilter.class, “/*”, EnumSet.allOf(DispatcherType.class)); servletContextHandler.addServlet(servletHolder, “/”); ResourceHandler resHandler = new ResourceHandler(); resHandler.setBaseResource(Resource.newClassPathResource(“/web”)); server.setHandler(resHandler); 这是我的Guice ServletModule : serve(“/socket/*”).with(WebSocketManagerServlet.class); serve(“/fs/read/*”).with(MyCustomServlet.class); 但是,我不知道如何做最后一条规则,它重定向任何与index.html不匹配的东西,并且仍然让jetty发出正确的标题,为css/js/html等正确的mime类型.Petty也可能做一些内存映射和花哨的东西,以便快速提供这些,我想维护。