cxf支持cors跨域

摘要:前台直接ajax请求后台webService服务,可能涉及跨域,是否同源,可以参考http://www.ruanyifeng.com/blog/2016/04/same-origin-policy.html
环境:spring+cxf
顺便把搭建cxf rest服务的一些代码配置也贴出来了

一.所需jar

        <!-- cxf -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>3.1.7</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.1.7</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>3.1.7</version>
            <scope>provided</scope>
        </dependency>

    <!--cors-->
    <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-security-cors</artifactId>
            <version>3.1.7</version>
        </dependency>

接口代码

@Produces({MediaType.APPLICATION_JSON + ";charset=UTF-8"})
@Path("/")
public interface OssTokenService {

    /**
     * <p>APP请求临时oss秘钥</p>
     * @return 返回临时访问oss的秘钥信息
     */
    @GET
    @CrossOriginResourceSharing(
            allowAllOrigins = true,
            allowOrigins = { "*" },
            allowCredentials = true
    )
    @Path("/token")
    public String getToken();

}

上面的@CrossOriginResourceSharing cxf支持cors跨域的注解{
allowAllOrigins : true 为真,资源将被返回
allowCredentials : true 为真,资源将被返回
allowOrigins : 允许的访问资源
}
注意的是,这里只是对这个接口里的这一个方法生效,放接口类上是对所有方法生效

spring.xml配置代码

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:osgi="http://www.springframework.org/schema/osgi"
       xmlns:osgix="http://www.springframework.org/schema/osgi-compendium"
       xmlns:cxf="http://cxf.apache.org/core"
       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/util
            http://www.springframework.org/schema/util/spring-util.xsd
            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
            http://www.springframework.org/schema/osgi
            http://www.springframework.org/schema/osgi/spring-osgi.xsd
            http://www.springframework.org/schema/osgi-compendium
            http://www.springframework.org/schema/osgi-compendium/spring-osgi-compendium.xsd
    ">

    <context:annotation-config />
    <context:component-scan base-package="com.yf.af.oss"/>

    <bean id="ossTokenService" class="com.yf.af.oss.service.impl.OssTokenServiceImpl" lazy-init="true" scope="singleton">
    </bean>

    <!-- cxf -->

    <cxf:bus id="yfafOssBus">
        <cxf:properties>
            <entry key="skip.default.json.provider.registration" value="true"/>
            <entry key="org.apache.cxf.jaxrs.bus.providers" value-ref="busProviders"/>
        </cxf:properties>
        <cxf:features>
            <cxf:logging/>
        </cxf:features>
    </cxf:bus>
    <util:list id="busProviders">
        <ref bean="jsonProvider"/>
    </util:list>

    <bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" />

    <jaxrs:server address="/oss">
        <jaxrs:serviceBeans>
            <list>
                <ref bean="ossTokenService"/>
            </list>
        </jaxrs:serviceBeans>

<!--cxf cors-->
        <jaxrs:providers>
            <bean
                    class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter" >
                <property name="allowOrigins"
                          value="*">
                </property>
            </bean>
            <!--<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider"></bean>-->
        </jaxrs:providers>

    </jaxrs:server>
</beans>

测试:HTML页面ajax请求

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test HTML</title>
<script type="text/javascript" src="jquery-1.8.3.js"></script>

<script>


$(document).ready(function(){

    /*$.getJSON("url", {
            参数:'值'
         }, function(json) {                        
                 alert("1111");                       
    });*/

    $("p").click(function(){  
        var requestURL ="http://localhost:8181/cxf/oss/token;  
        $.ajax({
            type: "GET",
            url: requestURL,
            data: null,
            async: false,
            dataType: 'json',
            success: function(data) {
                alert(data);
            }
        });
    });  

});
</script>
</head>
<body>
<p>click</p>
</body>
</body>
</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值