@Override public void start() throws Exception { Router router = Router.router(vertx); // Allow events for the designated addresses in/out of the event bus bridge BridgeOptions opts = new BridgeOptions() .addInboundPermitted(new PermittedOptions().setAddress("com.example:cmd:poke-server")) .addOutboundPermitted(new PermittedOptions().setAddress("com.example:stat:server-info")); // Create the event bus bridge and add it to the router. SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts); router.route("/eventbus/*").handler(ebHandler); // Create a router endpoint for the static content. router.route().handler(StaticHandler.create()); // Start the web server and tell it to use the router to handle requests. vertx.createHttpServer().requestHandler(router).listen(8080); EventBus eb = vertx.eventBus(); vertx.setPeriodic(1000l, t -> { // Create a timestamp string String timestamp = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM).format(Date.from(Instant.now())); eb.send("com.example:stat:server-info", new JsonObject().put("systemTime", timestamp)); }); } }
@Override public void start() throws Exception { Router router = Router.router(vertx); // Allow events for the designated addresses in/out of the event bus bridge BridgeOptions opts = new BridgeOptions() .addInboundPermitted(new PermittedOptions().setAddress("chat.message")) .addOutboundPermitted(new PermittedOptions().setAddress("chat.message")); // Create the event bus bridge and add it to the router. SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts); router.route("/eventbus/*").handler(ebHandler); // Create a router endpoint for the static content. router.route().handler(StaticHandler.create()); // Start the web server and tell it to use the router to handle requests. vertx.createHttpServer().requestHandler(router).listen(8080); } }
.addInboundPermitted(new PermittedOptions().setAddress("chat.to.server")) .addOutboundPermitted(new PermittedOptions().setAddress("chat.to.client"));
@Override public void start() throws Exception { // Create the client object MyService service = new MyServiceImpl(); // Register the handler new ServiceBinder(vertx) .setAddress("proxy.example") .register(MyService.class, service); Router router = Router.router(vertx); BridgeOptions options = new BridgeOptions().addInboundPermitted(new PermittedOptions().setAddress("proxy.example")); router.route("/eventbus/*").handler(SockJSHandler.create(vertx).bridge(options)); // Serve the static resources router.route().handler(StaticHandler.create()); vertx.createHttpServer().requestHandler(router).listen(8080); } }
@Override public void start() throws Exception { // Create the client object ProcessorService service = new ProcessorServiceImpl(); // Register the handler new ServiceBinder(vertx) .setAddress("vertx.processor") .register(ProcessorService.class, service); Router router = Router.router(vertx); // Allow events for the designated addresses in/out of the event bus bridge BridgeOptions opts = new BridgeOptions() .addInboundPermitted(new PermittedOptions().setAddress("vertx.processor")) .addOutboundPermitted(new PermittedOptions().setAddress("vertx.processor")); // Create the event bus bridge and add it to the router. SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts); router.route("/eventbus/*").handler(ebHandler); router.route().handler(StaticHandler.create()); // vertx.createHttpServer().requestHandler(router).listen(8080); }
.addInboundPermitted(new PermittedOptions() .setAddress("vtoons.listAlbums")) .addInboundPermitted(new PermittedOptions() .setAddress("vtoons.login")) .addInboundPermitted(new PermittedOptions() .setAddress("vtoons.placeOrder") .setRequiredAuthority("place_order"))
@Test public void testSendPermittedStructureMatch() throws Exception { JsonObject match = new JsonObject().put("fib", "wib").put("oop", 12); sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setMatch(match))); testSend(addr, match); JsonObject json1 = match.copy(); json1.put("blah", "foob"); testSend(addr, json1); json1.remove("fib"); testError(new JsonObject().put("type", "send").put("address", addr).put("body", json1), "access_denied"); }
@Test public void testSendPermittedStructureMatchWithAddress() throws Exception { JsonObject match = new JsonObject().put("fib", "wib").put("oop", 12); sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setMatch(match).setAddress(addr))); testSend(addr, match); JsonObject json1 = match.copy(); json1.put("blah", "foob"); testSend(addr, json1); json1.remove("fib"); testError(new JsonObject().put("type", "send").put("address", addr).put("body", json1), "access_denied"); testError(new JsonObject().put("type", "send").put("address", "otheraddress").put("body", json1), "access_denied"); }
@Test public void testSendPermittedMixedAddressRe() throws Exception { String addr1 = "allow1"; String addr2 = "ballo.+"; sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr1)). addInboundPermitted(new PermittedOptions().setAddressRegex(addr2))); testSend("allow1", "foobar"); testSend("ballow1", "foobar"); testSend("ballow2", "foobar"); testError(new JsonObject().put("type", "send").put("address", "hello").put("body", "blah"), "access_denied"); testError(new JsonObject().put("type", "send").put("address", "allow2").put("body", "blah"), "access_denied"); }
@Test public void testSendRequiresAuthorityNotLoggedIn() throws Exception { sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr).setRequiredAuthority("admin"))); testError(new JsonObject().put("type", "send").put("address", addr).put("body", "foo"), "not_logged_in"); }
@Test public void testSendPermittedAllowAddress() throws Exception { String addr = "allow1"; sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr))); testSend(addr, "foobar"); testError(new JsonObject().put("type", "send").put("address", "allow2").put("body", "blah"), "access_denied"); }
@Test public void testSendPermittedAllowAddressRe() throws Exception { String addr = "allo.+"; sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddressRegex(addr))); testSend("allow1", "foobar"); testSend("allow2", "foobar"); testError(new JsonObject().put("type", "send").put("address", "hello").put("body", "blah"), "access_denied"); }
@Test public void testSendPermittedMultipleAddresses() throws Exception { String addr1 = "allow1"; String addr2 = "allow2"; sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr1)). addInboundPermitted(new PermittedOptions().setAddress(addr2))); testSend("allow1", "foobar"); testSend("allow2", "foobar"); testError(new JsonObject().put("type", "send").put("address", "allow3").put("body", "blah"), "access_denied"); }
@Test public void testSendPermittedMultipleAddressRe() throws Exception { String addr1 = "allo.+"; String addr2 = "ballo.+"; sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddressRegex(addr1)). addInboundPermitted(new PermittedOptions().setAddressRegex(addr2))); testSend("allow1", "foobar"); testSend("allow2", "foobar"); testSend("ballow1", "foobar"); testSend("ballow2", "foobar"); testError(new JsonObject().put("type", "send").put("address", "hello").put("body", "blah"), "access_denied"); }
@Test public void testReplyMessagesInbound() throws Exception { // Only allow inbound address, reply message should still get through though sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr))); CountDownLatch latch = new CountDownLatch(1); client.websocket(websocketURI, ws -> { MessageConsumer<Object> consumer = vertx.eventBus().consumer(addr); consumer.handler(msg -> { Object receivedBody = msg.body(); assertEquals("foobar", receivedBody); msg.reply("barfoo"); consumer.unregister(); }); String replyAddress = UUID.randomUUID().toString(); JsonObject msg = new JsonObject().put("type", "send").put("address", addr).put("replyAddress", replyAddress).put("body", "foobar"); ws.writeFrame(io.vertx.core.http.WebSocketFrame.textFrame(msg.encode(), true)); ws.handler(buff -> { String str = buff.toString(); JsonObject received = new JsonObject(str); Object rec = received.getValue("body"); assertEquals("barfoo", rec); ws.closeHandler(v -> latch.countDown()); ws.close(); }); }); awaitLatch(latch); }
@Test public void testSendRequiresAuthorityHasnotAuthority() throws Exception { sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr).setRequiredAuthority("pick_nose"))); router.clear(); router.route().handler(CookieHandler.create()); SessionStore store = LocalSessionStore.create(vertx); router.route().handler(SessionHandler.create(store)); JsonObject authConfig = new JsonObject().put("properties_path", "classpath:login/loginusers.properties"); AuthProvider authProvider = ShiroAuth.create(vertx, new ShiroAuthOptions().setType(ShiroAuthRealmType.PROPERTIES).setConfig(authConfig)); addLoginHandler(router, authProvider); router.route("/eventbus/*").handler(sockJSHandler); testError(new JsonObject().put("type", "send").put("address", addr).put("body", "foo"), "access_denied"); }
@Test public void testInvalidMessageCode() { router.route("/ws-timeout/*").handler(SockJSHandler .create(vertx) .bridge(new BridgeOptions().addInboundPermitted(new PermittedOptions().setAddress("SockJSHandlerTest.testInvalidMessageCode"))) ); vertx.eventBus().consumer("SockJSHandlerTest.testInvalidMessageCode", msg -> msg.reply(new JsonObject())); client.websocket("/ws-timeout/websocket", ws -> { ws.writeFinalBinaryFrame(Buffer.buffer("durp!")); ws.frameHandler(frame -> { // we should get a normal frame with a error message if (!frame.isClose()) { JsonObject msg = new JsonObject(frame.binaryData()); assertEquals("err", msg.getString("type")); assertEquals("invalid_json", msg.getString("body")); testComplete(); ws.close(); } }); }); await(); } }
sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr)));
@Override public void start() throws Exception { /* test service */ final TestService testService = new TestService(); /* address */ final String address = "testservice"; /* service builder */ final ServiceBuilder serviceBuilder = ServiceBuilder.serviceBuilder(); serviceBuilder.setServiceObject(testService); final ServiceQueue serviceQueue = serviceBuilder.build(); /* vertx event bus bridge to qbit. */ final VertxEventBusBridgeBuilder vertxEventBusBridgeBuilder = VertxEventBusBridgeBuilder .vertxEventBusBridgeBuilder() .setVertx(vertx); vertxEventBusBridgeBuilder.addBridgeAddress(address, TestService.class); final Router router = Router.router(vertx); router.route("/health/").handler(routingContext -> routingContext.response().end("\"ok\"")); /* Configure bridge at this HTTP/WebSocket URI. */ router.route("/eventbus/*").handler(SockJSHandler.create(vertx).bridge( new BridgeOptions() .addInboundPermitted(new PermittedOptions().setAddress(address)) .addOutboundPermitted(new PermittedOptions().setAddress(address)) )); vertxEventBusBridgeBuilder.setServiceQueue(serviceQueue); serviceQueue.startAll(); //startall not supported yet for bridge. vertxEventBusBridgeBuilder.build(); vertx.createHttpServer().requestHandler(router::accept).listen(8080); System.out.println("Bound to 8080"); }
@Test public void testSendRequiresAuthorityHasAuthority() throws Exception { sockJSHandler.bridge(defaultOptions.addInboundPermitted(new PermittedOptions().setAddress(addr).setRequiredAuthority("bang_sticks"))); router.clear(); router.route().handler(CookieHandler.create()); SessionStore store = LocalSessionStore.create(vertx); router.route().handler(SessionHandler.create(store)); JsonObject authConfig = new JsonObject().put("properties_path", "classpath:login/loginusers.properties"); AuthProvider authProvider = ShiroAuth.create(vertx, new ShiroAuthOptions().setType(ShiroAuthRealmType.PROPERTIES).setConfig(authConfig)); addLoginHandler(router, authProvider); router.route("/eventbus/*").handler(sockJSHandler); testSend("foo"); }