首页后端开发PHPjava后台调用接口及处理跨域问题的方法是什么

java后台调用接口及处理跨域问题的方法是什么

时间2023-07-10 20:50:02发布访客分类PHP浏览979
导读:这篇“java后台调用接口及处理跨域问题的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java后台调用接口及处理...
这篇“java后台调用接口及处理跨域问题的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java后台调用接口及处理跨域问题的方法是什么”文章吧。

java调用接口及处理跨域

在做系统的时候,有些时候系统A的js代码需要调用系统B的接口,这就会产生跨域现象,可以通过后台调用处理跨域

问题,这就有点 “代理” 的意思了。

在这记录一个通用的方法
publicStringhttpPost(StringurlStr,MapString,String>
params){
    
URLconnect;
    
StringBufferdata=newStringBuffer();

try{
    
connect=newURL(urlStr);
    
HttpURLConnectionconnection=(HttpURLConnection)connect.openConnection();
    
connection.setRequestMethod("POST");
    
connection.setDoOutput(true);
    
connection.setDoInput(true);
    
connection.setUseCaches(false);
    //post不能使用缓存
connection.setInstanceFollowRedirects(true);
    
connection.setRequestProperty("accept","*/*");
    
connection.setRequestProperty("connection","Keep-Alive");
    
connection.setRequestProperty("user-agent","Mozilla/4.0(compatible;
    MSIE6.0;
    WindowsNT5.1;
    SV1)");
    
OutputStreamWriterparamout=newOutputStreamWriter(connection.getOutputStream(),"UTF-8");
    
StringparamsStr="";
//拼接Post请求的参数
for(Stringparam:params.keySet()){
    
paramsStr+="&
    "+param+"="+params.get(param);

}

if(!paramsStr.isEmpty()){
    
paramsStr=paramsStr.substring(1);

}
    
paramout.write(paramsStr);
    
paramout.flush();
    
BufferedReaderreader=newBufferedReader(newInputStreamReader(
connection.getInputStream(),"UTF-8"));
    
Stringline;

while((line=reader.readLine())!=null){
    
data.append(line);

}
    
paramout.close();
    
reader.close();

}
catch(Exceptione){
    
//TODOAuto-generatedcatchblock
e.printStackTrace();

}
    
returndata.toString();

}
    

调用外部接口引起的跨域问题

背景:在我们系统上,从外部引用了一个建议系统,在建议系统当用户被给予评论或回复之后,我的消息中显示未读消息数。

实现的效果:在建议系统中当未读消息数大于0时,我们的系统引入建议系统的位置上会出现提示有未读消息的红点。

在建议系统的后台,我们写了一个countBlog的接口,用来获取未读消息数量(json格式)

在我们的系统的前台,引入接口通过返回的未读消息数量来控制红点显示

运行后报跨域问题的bug:

解决问题

方法一:注解@CrossOrigin

方法二:addCorsMappings配置

@Override
publicvoidaddCorsMappings(CorsRegistryregistry){
    
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET","HEAD","POST","PUT","DELETE","OPTIONS")
.allowCredentials(true)
.maxAge(3600)
.allowedHeaders("*");

}
    

弊端:使用此方法配置之后再使用自定义拦截器时跨域相关配置就会失效。

原因是请求经过的先后顺序问题,当请求到来时会先进入拦截器中,而不是进入Mapping映射中,所以返回的头信息中并没有配置的跨域信息。浏览器就会报跨域异常。

方法三:使用CorsFilter过滤器

privateCorsConfigurationcorsConfig(){
    
CorsConfigurationcorsConfiguration=newCorsConfiguration();
    
*请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
*/
corsConfiguration.addAllowedOrigin("*");
    
corsConfiguration.addAllowedHeader("*");
    
corsConfiguration.addAllowedMethod("*");
    
corsConfiguration.setAllowCredentials(true);
    
corsConfiguration.setMaxAge(3600L);
    
returncorsConfiguration;

}

@Bean
publicCorsFiltercorsFilter(){
    
UrlBasedCorsConfigurationSourcesource=newUrlBasedCorsConfigurationSource();
    
source.registerCorsConfiguration("/**",corsConfig());
    
returnnewCorsFilter(source);

}
    

以上就是关于“java后台调用接口及处理跨域问题的方法是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

java

若转载请注明出处: java后台调用接口及处理跨域问题的方法是什么
本文地址: https://pptw.com/jishu/301620.html
mysql中怎么创建和查询外键 安卓怎么使用JavaScript语言修改页面元素

游客 回复需填写必要信息