java后端解决跨域的几种问题解决
作者:晓宇码匠 时间:2022-01-05 06:34:24
1.java过滤器过滤
允许整个项目跨域访问,可通过filter来进行过虑:
public class SimpleCORSFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
在web.xml中需要添加如下配置:
<filter>
<filter-name>cors</filter-name>
<filter-class>com.ssm.web.filter.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</filter>
为单个方法提供跨域访问,直接添加请求头:
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
2.后台Http请求转发
使用HttpClinet转发进行转发(简单的例子 不推荐使用这种方式)
try {
HttpClient client = HttpClients.createDefault(); //client对象
HttpGet get = new HttpGet("http://localhost:8080/test"); //创建get请求
CloseableHttpResponse response = httpClient.execute(get); //执行get请求
String mes = EntityUtils.toString(response.getEntity()); //将返回体的信息转换为字符串
System.out.println(mes);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
3、后台配置同源Cors (推荐)
在SpringBoot2.0 上的跨域 用以下代码配置 即可完美解决你的前后端跨域请求问题
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* 实现基本的跨域请求
* @author linhongcun
*
*/
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
/*是否允许请求带有验证信息*/
corsConfiguration.setAllowCredentials(true);
/*允许访问的客户端域名*/
corsConfiguration.addAllowedOrigin("*");
/*允许服务端访问的客户端请求头*/
corsConfiguration.addAllowedHeader("*");
/*允许访问的方法名,GET POST等*/
corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
}
4、使用SpringCloud网关
服务网关(zuul)又称路由中心,用来统一访问所有api接口,维护服务。
Spring Cloud Zuul通过与Spring Cloud Eureka的整合,实现了对服务实例的自动化维护,所以在使用服务路由配置的时候,我们不需要向传统路由配置方式那样去指定具体的服务实例地址,只需要通过Ant模式配置文件参数即可
5、使用nginx做转发
现在有两个网站想互相访问接口 在http://a.a.com:81/A中想访问 http://b.b.com:81/B 那么进行如下配置即可
然后通过访问 www.my.com/A 里面即可访问 www.my.com/B
server {
listen 80;
server_name www.my.com;
location /A {
proxy_pass http://a.a.com:81/A;
index index.html index.htm;
}
location /B {
proxy_pass http://b.b.com:81/B;
index index.html index.htm;
}
}
如果是两个端口想互相访问接口 在http://b.b.com:80/Api中想访问 http://b.b.com:81/Api 那么进行如下配置即可
使用nginx转发机制就可以完成跨域问题
server {
listen 80;
server_name b.b.com;
location /Api {
proxy_pass http://b.b.com:81/Api;
index index.html index.htm;
}
}
来源:https://blog.csdn.net/qq_37651267/article/details/93367870
标签:java,跨域
0
投稿
猜你喜欢
SpringBoot+Redis实现数据字典的方法
2022-08-03 14:22:29
android 实现类似微信缓存和即时更新好友头像示例
2023-12-04 20:47:41
c#初学简单程序实例代码介绍
2023-11-04 10:53:53
DWR异常情况处理常见方法解析
2022-10-14 02:10:50
关于QueryWrapper,实现MybatisPlus多表关联查询方式
2021-10-15 07:24:59
C#如何给PDF文件添加水印
2021-07-20 14:32:36
Java使用POI导出Excel(二):多个sheet
2022-11-26 02:09:44
SprinBoot整合Quart实现定时调度的示例代码
2021-12-07 21:30:59
springboot中通过lua脚本来获取序列号的方法
2023-05-05 04:25:44
C#byte数组传入C操作方法
2021-11-06 12:30:18
Jpa Specification如何实现and和or同时使用查询
2023-10-17 20:49:38
解决springboot遇到autowire注入为null的问题
2022-04-15 02:37:59
Java 确保某个Bean类被最后执行的几种实现方式
2021-09-28 09:53:49
Unity3D获取当前键盘按键及Unity3D鼠标、键盘的基本操作
2023-06-01 18:01:45
Flutter实现底部导航栏
2023-05-18 15:10:26
WheelPicker自定义时间选择器控件
2023-05-16 18:30:05
使用android隐藏api实现亮度调节的方法
2022-10-16 23:37:36
Android Service启动流程刨析
2023-07-31 11:28:58
Android NDK开发(C语言字符串)
2023-06-18 10:21:28
android开发权限询问的示例代码
2021-07-29 00:16:26