js ajax java 跨域问题

服务端

/**

* Created with service_platform

* User: luojian

* Data: 11/7/16

* TIme: 4:55 PM

* 该config会使其他config配置的拦截器失效 需要把其他地方添加的拦截器添加进来 如ApplicationInterceptorConfigurer里的拦截器

*/

@Configuration

public class AppWebMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired

    private AccessRequiredHandlerInterceptor userHandlerInterceptorAdapter;



    /**
    
     * 默认返回类型为json

     * @param configurer

     */

    @Override

    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

        configurer.ignoreAcceptHeader(false)
                  .defaultContentType(MediaType.APPLICATION_JSON_UTF8);

    }



    /**

     * 跨域设置

    * allowedOrigins 允许访问域名

    * allowedMethods 允许访问方式

    * allowedHeaders 允许自定义头

    * exposedHeaders 客户端允许接受头字段

    * @param registry

    */

    @Override

    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**").allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .exposedHeaders("captchaCodeToken")
                .allowCredentials(false).maxAge(3600);

    }



    /**

     * api版本路由

     * @return

     */

    @Bean

    public RequestMappingHandlerMapping requestMappingHandlerMapping() {

        RequestMappingHandlerMapping handlerMapping = new ApiVersionRouteRequestHandlerMapping();

        handlerMapping.setOrder(0);

        return handlerMapping;

    }



    /**

     * 拦截器添加

     * @param registry

     */

    @Override

    public void addInterceptors(InterceptorRegistry registry) {

        super.addInterceptors(registry);

        //添加用户访问拦截器

        registry.addInterceptor(userHandlerInterceptorAdapter);

        //.addPathPatterns("/**"); 这个可以拦截/version /xx/xx

        //.addPathPatterns("/*");拦截所有请求 加上这个只拦截像/version /info/xx拦截不了

    }



}



或

//@WebFilter(filterName = "corsFilter", urlPatterns = "/*",

// initParams = {

// @WebInitParam(name = "exclusions", value = "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*")// 忽略资源

// })

public class CorsFilter extends BaseFilter{

    @Override

    protected boolean doFilter() throws IOException, ServletException {

        initResponse();

        return true;

    }



    private void initResponse() {

        if(Application.getRequest().getMethod().equalsIgnoreCase("options")){

            HttpServletResponse response = Application.getResponse();

            response.addHeader("Access-Control-Allow-Origin","*");

            response.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT");

            response.addHeader("Access-Control-Allow-Headers", "*");

            // 添加其他header头

        }

    }

}

客户端

// XMLHttpRequest 请求 主要接受字节流

$("#post_sms").click(function () {

    var url="http://192.168.0.120:20002/v2/smscodes/image?type=0";

    var xhr = new XMLHttpRequest();

    xhr.responseType = "blob";

    xhr.open("get", url, true);

    xhr.setRequestHeader("flag","inviter");

    xhr.onload = function() {

        if (this.status == 200) {

            var blob = this.response;

  
            var captchaCodeToken=this.getResponseHeader("captchaCodeToken");

            console.log("captchaCodeToken:",captchaCodeToken)


            console.log("blob is ",blob)

            var src=window.URL.createObjectURL(blob);

            console.log("img blob src is ",src)


            $("#img_container").attr("src",src);

            $("#tv_token")[0].innerHTML=captchaCodeToken;


            // var base64=new Base64().encode(blob);

            // console.log("base64 is ",base64);


            var reader = new FileReader(); //通过 FileReader 读取blob类型

            reader.onload = function(){

                console.log("img base64 src is ",this.result);

                $("#img_container2").attr("src",this.result);

            }

            reader.readAsDataURL(blob);

        }

    }

    xhr.send();

}





//ajax请求

$.ajax({

    type: 'get', cache: false, dataType: 'TEXT',

    url: "http://192.168.0.120:20002/v2/smscodes/image?type=0",

    headers: {'flag':'inviter'},

    // headers: {'Content-Type': 'application/json'},

    // data: JSON.stringify({

    // "mobile": username,

    // "pwd": password,

    // "loginType": 1,

    // "deviceType": "web"

// }),

    success: function (result,textStatus, request) {

        var str=new Base64().encode(result);

        console.log("base64:",str);

        var responseHeaders=request.getAllResponseHeaders();

        console.log("body:",result);

        console.log("responseHeaders:",responseHeaders);

        console.log("codeToken:",request.getResponseHeader("captchaCodeToken"))

    },

    error: function (result) {

        $("#btn_login").disabled=true;

        console.log("fail result:" + result)

    }

})



$.ajax({

    type: 'get',dataType: 'HTML',

    headers: {'flag':'inviter'},

    url: "http://192.168.0.120:20002/v2/smscodes/image?type=0",

    crossDomain: true,

    xhrFields: {

        withCredentials: true

    },

    complete: function(xhr, textStatus){

        // var headerss = XMLHttpRequest;
    
        var wpoInfo = {

            // 服务器端时间

            "date" : xhr.getResponseHeader('Date'),

            // 如果开启了gzip,会返回这个东西

            "contentEncoding" : xhr.getResponseHeader('Content-Encoding'),

            // keep-alive ? close?

            "connection" : xhr.getResponseHeader('Connection'),

            // 响应长度

            "contentLength" : xhr.getResponseHeader('Content-Length'),

            // 服务器类型,apache?lighttpd?

            "server" : xhr.getResponseHeader('Server'),

            "vary" : xhr.getResponseHeader('Vary'),

            "transferEncoding" : xhr.getResponseHeader('Transfer-Encoding'),

            // text/html ? text/xml?

            "contentType" : xhr.getResponseHeader('Content-Type'),

            "cacheControl" : xhr.getResponseHeader('Cache-Control'),

            // 生命周期?

            "exprires" : xhr.getResponseHeader('Exprires'),

            "lastModified" : xhr.getResponseHeader('Last-Modified'),

            "captchaCodeToken": xhr.getResponseHeader('captchaCodeToken')

        };

        // // 在这里,做想做的事。。。

        console.log("wpoInfo:",wpoInfo);

    },

    success: function(data, textStatus, jqXHR) {

        console.log("ajax request send success")

        console.log("responseHeader:",jqXHR.getAllResponseHeaders())

        console.log("data:",data)

    },

    error:function(){

        console.log("error")

    }

})

猜你喜欢

转载自blog.csdn.net/nailsoul/article/details/81325352