2016-05-03 18 views
0

Ich habe eine einfache Dropwizard-App. Wenn ein Benutzer gerade versucht, sich mit ungültigen Anmeldeinformationen anzumelden, wird die Login-Box immer wieder geöffnet (in einem Browser-Client). Ich möchte in der Lage sein, eine Ausnahme auszulösen, ein JSON zurückgeben lassen den Benutzer wissen, dass die Authentifizierung fehlgeschlagen ist.Werfen/Catching AuthenticationException in Dropwizard

versuchte ich folgende:

@Override 
public Optional<SimplePrincipal> authenticate(BasicCredentials credentials) 
throws AuthenticationException { 
DPSLookup dps = new DPSLookup(credentials.getUsername(), credentials. 
getPassword(), ldap); 
if (!dps.dpsLookup()) { 
        throw new InvalidCredentialException("Access Denied"); 
       } 
       else { 
       SimplePrincipal user = new SimplePrincipal(credentials. 
getUsername()); 
       return Optional.of(user); 
       } 
    } 

Und ich habe dann eine InvalidCredentialException Klasse: public class InvalidCredentialException erweitert AuthenticationException {

public InvalidCredentialException(String message) { 
super(message); 
} 

} 

aber ich einen 500 Antwort Fehler jetzt mit folgenden Ausnahme erhalten :

WARN [2016-05-03 14:09:49,982] 
io.dropwizard.auth.basic.BasicCredentialAuthFilter: Error authenticating 
credentials 
! bns.gwtd.dpm.auth.InvalidCredentialException: Access Denied 
! at 
bns.gwtd.dpm.auth.SimpleAuthenticator.authenticate(SimpleAuthenticator.java:50) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
bns.gwtd.dpm.auth.SimpleAuthenticator.authenticate(SimpleAuthenticator.java:24) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.auth.basic.BasicCredentialAuthFilter.filter(BasicCredentialAuthFilter.java:47) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:132) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:68) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:43) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:38) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:256) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:219) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:240) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.eclipse.jetty.server.Server.handle(Server.java:499) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91] 
ERROR [2016-05-03 14:09:49,983] 
io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a 
request: 122bf997f092f693 
! javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error 
! at 
io.dropwizard.auth.basic.BasicCredentialAuthFilter.filter(BasicCredentialAuthFilter.java:74) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:132) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ContainerFilteringStage.apply(ContainerFilteringStage.java:68) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.process.internal.Stages.process(Stages.java:197) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:318) 
~[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:43) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:38) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlets.CrossOriginFilter.handle(CrossOriginFilter.java:256) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlets.CrossOriginFilter.doFilter(CrossOriginFilter.java:219) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:240) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.eclipse.jetty.server.Server.handle(Server.java:499) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at 
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) 
[gwtd-auth-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT] 
! at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91] 

Antwort

0

Der einfachste Weg hier ist InvalidCredentialException extend NotAuthorizedException, Jersey versteht alles, was WebApplicationException ausdehnt, und wandelt sie in entsprechende HTTP-Antworten um, anstatt sie auf dem Server behandeln zu lassen. Da InvalidCredentialException bereits eine Nachricht unterstützt, ist es besser, diese direkt zu werfen.