CXF 3.2.2 CORS失败,出现“没有'Access-Control-Allow-Origin'标头”

时间:2018-10-12 06:07:21

标签: spring-boot cors cxf

我正在使用CXF +弹簧靴来开发Restful服务。并在CORS设置方面遇到问题

我在服务定义接口(GateRs)上设置了CORS

...
@Service
@CrossOriginResourceSharing(
    allowAllOrigins = true, 
    allowHeaders = {
            "Accept", "Accept-Charset", "Accept-Encoding", "Accept-Datetime", 
            "Accept-Language", "Authorization", "Content-Language", "Content-Length", 
            "Content-Type", "Origin", "User-Agent"},
    exposeHeaders = {
            "Accept", "Accept-Charset", "Accept-Encoding", "Accept-Datetime", 
            "Accept-Language", "Authorization", "Content-Language", "Content-Length", 
            "Content-Type", "Origin", "User-Agent"},
    allowCredentials = true, 
    maxAge = 1209600 )
public interface GateRs {

    @POST
    @Path("/require")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    @VoluntarySecure
    public Res require(Req req);    
...

带有类的实现接口

@Component
public class Gate implements GateRs {   

        @Override
        public Res require(Req req) { 
...

将“ CrossOriginResourceSharingFilter”附加到服务bean

    @Bean
        public CrossOriginResourceSharingFilter cors() {
            return new CrossOriginResourceSharingFilter();
        }

    @Bean(destroyMethod = "destroy") @DependsOn(Bus.DEFAULT_BUS_ID)
    public Server jaxRsServer() {
        final JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();

        factory.setServiceBean(new Gate());
        factory.setProviders(Arrays.asList(jackson(), cors()));
        factory.setBus(springBus());
        factory.setAddress("/Gate");

        return factory.create();
    } 
...

客户端是基于Ionic的移动应用程序,并由Chrome浏览器模拟。

“ / Gate / require”返回“ 404”,因为CORS失败,没有“ Access-Control-Allow-Origin“标头。

我仔细研究了细节;并且发现预检('OPTIONS')实际上成功了; “ POST”失败,触发了上述消息

飞行前(选项)

enter image description here

POST失败;似乎服务器端未在响应消息中显示“ Access-Control-Allow-Origin”标头 enter image description here

有人有什么想法或建议吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我终于通过如下更改“ @CrossOriginResourceSharing”解决了该问题:

1 + summation<2, 3, 4>::value;  // Trims out first parameter; matches variadic version

2 + summation<3, 4>::value;    // Again, trims out first parameter;matches variadic version

3 + summation<4>::value;  // Matches <size> version. You support signature up-to this point

4 + summation<>::value;   // summation<> definition is missing in your code!!