如果您不想使用AOP,我认为您可以通过实现ResourceMethodDispatchProvider和ResourceMethodDispatchAdapter来实现。
public class CustomDispatchProvider implements ResourceMethodDispatchProvider {ResourceMethodDispatchProvider provider;CustomDispatchProvider(ResourceMethodDispatchProvider provider){ this.provider = provider;}@Overridepublic RequestDispatcher create(AbstractResourceMethod abstractResourceMethod) { System.out.println("creating new dispatcher for " + abstractResourceMethod); RequestDispatcher defaultDispatcher = provider.create(abstractResourceMethod); if (abstractResourceMethod.getMethod().isAnnotationPresent(Secure.class)) return new DispatcherDecorator(defaultDispatcher); else return defaultDispatcher;}@Providerpublic static class CustomDispatchAdapter implements ResourceMethodDispatchAdapter{ @Override public ResourceMethodDispatchProvider adapt(ResourceMethodDispatchProvider provider) { return new CustomDispatchProvider(provider); }}public static class DispatcherDecorator implements RequestDispatcher{ private RequestDispatcher dispatcher; DispatcherDecorator(RequestDispatcher dispatcher) { this.dispatcher = dispatcher; } public void dispatch(Object resource, HttpContext context) { if (context.getRequest().isSecure()) { System.out.println("secure request detected"); this.dispatcher.dispatch(resource, context); } else { System.out.println("request is NOT secure"); throw new RuntimeException("cannot access this resource over an insecure connection"); } }}}在Dropwizard中,像这样添加提供程序:environment.addProvider(CustomDispatchAdapter.class);



