Cors实现java后端完全跨域实例

作者:lifereader 时间:2022-01-04 15:03:33 

https://www.jb51.net/article/114838.htm这篇文章很详细的介绍了JS的跨域,给出的解决方案是springboot的方式,假如不用spring boot 或者 spring版本低于4.2就需要自己实现;

参考了spring boot的实现方式,并有所简化,代码如下:


package com.lvluo.web.filter.CorsFilter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.HttpHeaders;

public class CorsFilter implements Filter {

public static final String ACCESS_CONTROL_REQUEST_METHOD = "Access-Control-Request-Method";

public static final String OPTIONS = "OPTIONS";

public void doFilter(ServletRequest request, ServletResponse response,
 FilterChain chain) throws IOException, ServletException {

HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;

if (isCorsRequest(httpRequest)) {
 httpResponse.setHeader("Access-Control-Allow-Origin", "*");
 httpResponse.setHeader("Access-Control-Allow-Methods",
  "POST, GET, PUT, DELETE");
 httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
 // response.setIntHeader("Access-Control-Max-Age", 1728000);
 httpResponse
  .setHeader(
   "Access-Control-Allow-Headers",
   "Origin, X-Requested-With, Content-Type, Accept, Accept-Encoding, Authorization");
 if (isPreFlightRequest(httpRequest)) {
 return;
 }
}
chain.doFilter(request, response);
}

public void init(FilterConfig filterConfig) {
}

public void destroy() {
}

public boolean isCorsRequest(HttpServletRequest request) {
return (request.getHeader(HttpHeaders.ORIGIN) != null);
}

/**
* Returns {@code true} if the request is a valid CORS pre-flight one.
*/
public boolean isPreFlightRequest(HttpServletRequest request) {
return (isCorsRequest(request) && OPTIONS.equals(request.getMethod()) && request
 .getHeader(ACCESS_CONTROL_REQUEST_METHOD) != null);
}
}

接着在web.xml配置filter即可


<filter>
 <filter-name>corsFilter</filter-name>
 <filter-class>com.lvluo.web.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>corsFilter</filter-name>
 <url-pattern>/api/*</url-pattern>
</filter-mapping>

前端测试的JS代码,其中客户端的


$.ajax({
 headers : {
  'Authorization' :'Bearer iBoxSO9QdrHR0'
 },
 url: 'http://localhost:8080/service/api/ping',
 type: 'GET',
 dataType: 'json',
 success : function(result){
  $("#result").html(result.code);
 }
 })

来源:https://my.oschina.net/lifereader/blog/909524

标签:java,后端,跨域
0
投稿

猜你喜欢

  • JavaCV实现读取视频信息及自动截取封面图详解

    2022-05-20 14:43:05
  • C#仪器数据文件解析Excel文件的方法浅析(xls、xlsx)

    2023-09-18 01:40:57
  • Java正确使用访问修饰符的姿势

    2021-10-11 09:52:50
  • SpringDataMongoDB多文档事务的实现

    2023-11-25 06:37:55
  • java substring 截取字符串的方法

    2023-02-12 17:21:19
  • Java中RedisUtils工具类的使用

    2022-05-04 21:32:32
  • IDEA导出jar打包成exe应用程序的小结

    2023-06-22 04:02:46
  • Java多态的全面系统解析

    2023-06-22 13:39:22
  • SpringBoot2整合Drools规则引擎及案例详解

    2021-12-30 05:57:10
  • SparkSQl简介及运行原理

    2023-09-17 05:18:19
  • Spring自动配置之condition条件判断上篇

    2022-07-01 17:34:51
  • Mybatis 缓存原理及失效情况解析

    2022-12-04 07:28:43
  • C#异步编程Task的创建方式

    2023-07-23 06:22:43
  • Java中Maven项目导出jar包配置的示例代码

    2023-01-26 20:09:32
  • C#中ToString数据类型格式大全(千分符)

    2023-10-03 05:08:48
  • Java使用synchronized实现互斥锁功能示例

    2022-10-20 00:47:49
  • Spring Boot 集成MyBatis 教程详解

    2021-10-12 04:49:21
  • Java日常练习题,每天进步一点点(8)

    2022-04-15 16:40:26
  • 详解SpringCloud服务认证(JWT)

    2023-11-14 11:19:43
  • Java与kotlin详细对比

    2022-04-13 23:26:47
  • asp之家 软件编程 m.aspxhome.com