服务端
/**
* 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")
}
})