package com.englishtown.vertx.jersey.examples; import com.englishtown.vertx.jersey.inject.VertxRequestProcessor; import io.vertx.core.Handler; import io.vertx.core.Vertx; import io.vertx.core.http.HttpServerRequest; import org.glassfish.jersey.server.ContainerRequest; import javax.inject.Inject; import javax.ws.rs.core.SecurityContext; import java.security.Principal; public class CustomSecurityContextProvider implements VertxRequestProcessor { private final Vertx vertx; @Inject public CustomSecurityContextProvider(Vertx vertx) { this.vertx = vertx; } /** * Provide additional async request processing * * @param vertxRequest the vert.x http server request * @param jerseyRequest the jersey container request * @param done the done async callback handler */ @Override public void process(final HttpServerRequest vertxRequest, final ContainerRequest jerseyRequest, final Handler<Void> done) { vertx.runOnContext(aVoid -> { Principal p = () -> "test"; SecurityContext securityContext = new SecurityContext() { /** * {@inheritDoc} */ @Override public Principal getUserPrincipal() { return p; } /** * {@inheritDoc} */ @Override public boolean isUserInRole(String role) { String param = vertxRequest.params().get("role"); return role.equalsIgnoreCase(param); } /** * {@inheritDoc} */ @Override public boolean isSecure() { return false; } /** * {@inheritDoc} */ @Override public String getAuthenticationScheme() { return null; } }; jerseyRequest.setSecurityContext(securityContext); done.handle(null); }); } }