让Dropwizard构建的REST API支持跨域访问【Access-Control-Allow】

基于Dropwizard框架构建的REST API 默认情况下会出现跨域访问限制,好在 Dropwizard 提供了Filter机制能够解除这个限制,具体操作如下:

在 Dropwizad应用的起始类中添加如下里面注释说明的那一段代码即可。

import io.dropwizard.Application;
import io.dropwizard.setup.Bootstrap;
import io.dropwizard.setup.Environment;
import io.dropwizard.views.ViewBundle;
import org.eclipse.jetty.servlets.CrossOriginFilter;
import org.hibernate.internal.FilterConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.DispatcherType;
import java.util.EnumSet;
/**
 * Author:      YeFei
 * Create Date: 2014-05-26
 * Version:     V0.1
 */
public class PushApplication  extends Application<PushConfiguration> {
    static final Logger myLogger = LoggerFactory.getLogger(PushApplication.class);
    public static void main(String[] args) throws Exception {
         new PushApplication().run(args);
    }
    
    @Override
    public void initialize(Bootstrap<PushConfiguration> bootstrap) {
        myLogger.info( "###### Start Initialize SpringConfig" );
        XmlRestWebApplicationContext context = new XmlRestWebApplicationContext(new String[]{"classpath:applicationContext.xml"}, false);
        bootstrap.addBundle(new SpringBundle<PushConfiguration>(context, true, true, true));
        bootstrap.addBundle(new ViewBundle());
        myLogger.info( "###### End Initialize SpringConfig" );
    }
    
    @Override
    public void run(PushConfiguration configuration,
                    Environment environment) throws ClassNotFoundException {
        // 增加解除跨域限制的Filter,CrossOriginFilter 是Jetty提供的一个跨域处理Filter。
        environment.servlets().addFilter("CrossOriginFilter", new CrossOriginFilter())
                .addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");
    }
}

 

你可能感兴趣的:(jetty,Dropwizard)