Skip to content

Commit

Permalink
Remove Servlet specific auth from JAX-RS
Browse files Browse the repository at this point in the history
This is no longer needed after the changes in how challenges are handled.

Partial fix for #5419
  • Loading branch information
stuartwdouglas authored and gsmet committed Nov 19, 2019
1 parent 732e346 commit 60ea7e7
Showing 1 changed file with 8 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
package io.quarkus.resteasy.runtime;

import java.lang.reflect.Method;
import java.util.concurrent.ExecutionException;

import javax.annotation.Priority;
import javax.enterprise.inject.spi.CDI;
import javax.ws.rs.Priorities;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.jboss.logging.Logger;
import org.jboss.resteasy.core.ResteasyContext;

import io.quarkus.security.UnauthorizedException;
import io.quarkus.vertx.http.runtime.CurrentVertxRequest;
import io.quarkus.vertx.http.runtime.security.ChallengeData;
import io.quarkus.vertx.http.runtime.security.HttpAuthenticator;
import io.vertx.ext.web.RoutingContext;
Expand All @@ -28,41 +28,18 @@ public class UnauthorizedExceptionMapper implements ExceptionMapper<Unauthorized

private static final Logger log = Logger.getLogger(UnauthorizedExceptionMapper.class.getName());

//Servlet API may not be present
private static final Class<?> HTTP_SERVLET_REQUEST;
private static final Class<?> HTTP_SERVLET_RESPONSE;
private static final Method AUTHENTICATE;

static {
Class<?> httpServletReq = null;
Class<?> httpServletResp = null;
Method auth = null;
try {
httpServletReq = Class.forName("javax.servlet.http.HttpServletRequest");
httpServletResp = Class.forName("javax.servlet.http.HttpServletResponse");
auth = httpServletReq.getMethod("authenticate", httpServletResp);
} catch (Exception ignored) {
private volatile CurrentVertxRequest currentVertxRequest;

CurrentVertxRequest currentVertxRequest() {
if (currentVertxRequest == null) {
currentVertxRequest = CDI.current().select(CurrentVertxRequest.class).get();
}
AUTHENTICATE = auth;
HTTP_SERVLET_REQUEST = httpServletReq;
HTTP_SERVLET_RESPONSE = httpServletResp;
return currentVertxRequest;
}

@Override
public Response toResponse(UnauthorizedException exception) {
if (HTTP_SERVLET_REQUEST != null) {
Object httpServletRequest = ResteasyContext.getContextData(HTTP_SERVLET_REQUEST);
if (httpServletRequest != null) {
Object httpServletResponse = ResteasyContext.getContextData(HTTP_SERVLET_RESPONSE);
try {
AUTHENTICATE.invoke(httpServletRequest, httpServletResponse);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
RoutingContext context = ResteasyContext.getContextData(RoutingContext.class);
RoutingContext context = currentVertxRequest().getCurrent();
if (context != null) {
HttpAuthenticator authenticator = context.get(HttpAuthenticator.class.getName());
if (authenticator != null) {
Expand Down

0 comments on commit 60ea7e7

Please sign in to comment.