首页 > 编程语言 >在Java中实现跨域(Cross-Origin Resource Sharing, CORS)

在Java中实现跨域(Cross-Origin Resource Sharing, CORS)

时间:2023-11-15 16:36:53浏览次数:53  
标签:Origin Control Sharing Java springframework Access Allow import public

在Java中实现跨域(Cross-Origin Resource Sharing, CORS)主要涉及到在服务器端设置HTTP响应头,以允许来自不同源的客户端请求。下面是一些常用的方法来实现跨域:

1. Servlet过滤器

你可以创建一个过滤器(Filter)来添加必要的HTTP头。这种方法适用于所有基于Servlet的应用程序,如纯Servlet应用、Spring MVC等。

import javax.servlet.*;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

 

public class CORSFilter implements Filter {

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, authorization");

 

chain.doFilter(req, res);

}

 

public void init(FilterConfig filterConfig) {}

 

public void destroy() {}

}

 

2. Spring Boot

如果你使用Spring Boot,可以通过配置来启用CORS。

  • 全局配置:在@Configuration类中使用WebMvcConfigurer。
  • import org.springframework.context.annotation.Bean;
  • import org.springframework.context.annotation.Configuration;
  • import org.springframework.web.servlet.config.annotation.CorsRegistry;
  • import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  • @Configuration
  • public class WebConfig {
  • @Bean
  • public WebMvcConfigurer corsConfigurer() {
  • return new WebMvcConfigurer() {
  • @Override
  • public void addCorsMappings(CorsRegistry registry) {
  • registry.addMapping("/**")
  • .allowedOrigins("*")
  • .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
  • .allowedHeaders("*")
  • .allowCredentials(true);
  • }
  • };
  • }
  • }
 
  • 方法级配置:在Spring MVC的控制器方法上使用@CrossOrigin。
  • import org.springframework.web.bind.annotation.CrossOrigin;
  • import org.springframework.web.bind.annotation.GetMapping;
  • import org.springframework.web.bind.annotation.RestController;
  • @RestController
  • public class MyController {
  • @CrossOrigin(origins = "*")
  • @GetMapping("/myEndpoint")
  • public String myMethod() {
  • return "Hello";
  • }
  • }
 

3. Java EE (JAX-RS)

在Java EE环境下,如果使用JAX-RS(如Jersey或Resteasy),你可以在你的资源类或方法上使用@Cors注解。

import javax.ws.rs.GET;

import javax.ws.rs.Path;

import javax.ws.rs.core.Response;

 

@Path("/myResource")

public class MyResource {

 

@GET

public Response myMethod() {

return Response

.ok("Hello")

.header("Access-Control-Allow-Origin", "*")

.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")

.build();

}

}

 

以上方法中,可以根据实际需求调整允许的源(Access-Control-Allow-Origin)、方法(Access-Control-Allow-Methods)和头(Access-Control-Allow-Headers)等。

作者:http://www.xkrj5.com 转载保留版权!

标签:Origin,Control,Sharing,Java,springframework,Access,Allow,import,public
From: https://www.cnblogs.com/javakji/p/17834126.html

相关文章

  • Java流程控制06:While循环详解
     一、while循环publicclassWhileDemo01{publicstaticvoidmain(String[]args){//输出1~100,并且求和inti=1;intsum=0;while(i!=101){System.out.println(i);sum=sum+i;i++......
  • Java中for循环每次都通过list.size、str.length、length()获取数组或者字符串的长度是
    最近看到有同事在使用for循环的时候首先会将数组或者字符串的长度赋值给一个变量;在网上查了一下说是这样可以节约资源的消耗,真实的情况又是如何?让我们看下他们的源码来分析。1.将数组的长度赋值给变量lenList<Integer>list=newArrayList<Integer>();list.add(......
  • java怎么和html结合
    Java和HTML结合通常是在Web开发的背景下进行的。Java可以用于后端服务器编程,而HTML用于前端界面设计。这两者结合主要通过以下几种方式:Servlet和JSP:Servlet:JavaServlet是运行在Web服务器或应用服务器上的程序,它接收来自Web浏览器的请求,并生成响应给浏览器。Servlet通常用......
  • java实现的数独游戏
    数独游戏:窗体+逻辑实现类importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassSudokuGameextendsJFrame{privateJTextField[][]cells;privateint[][]solution;private......
  • Java 四种引用类型(强引用、软引用、弱引用、虚引用)
    概述Java中的引用类似C语言中的指针,指向一个对象,比如://person就是指向Person实例“张三”的引用Personperson=newPerson("张三");在JDK1.2以前,Java里的引用是很传统的定义:如果reference类型的数据中存储的数值代表的是另外一块内存的起始地址,就称该referenc......
  • CentOS中查看Java进程
    1.ps命令:可以用来查看当前系统中正在运行的进程。要查看Java进程,可以使用以下命令:ps-ef|grepjava该命令会列出所有包含“java”关键字的进程信息。你可以通过查看进程的PID(进程ID)和其他详细信息来确定你要找的java进程。2.jps命令:是Java虚拟机(JVM)提供的一个工具,用于查看当......
  • Java Mysql 类型为Long 转 前端String
    一、背景JavaMysql类型为Long转前端会丢失精度,在原先基础上补0000;二、实现1.//@JsonSerialize(using=ToStringSerializer.class)但是对我这里是不生效的@JSONField(serializeUsing=com.alibaba.fastjson.serializer.ToStringSerializer.class)生效三、遇......
  • 超音速亚原子 Java 框架来了,0.0015 秒内启动一个应用,太快了。。
    来源:juejin.cn/post/70233173515630018861、概述SpringBoot框架不用多介绍,Java程序员想必都知道。相对来说熟悉Quarkus的人可能会少一些。Quarkus首页放出的标语:超音速亚原子的Java(SupersonicSubatomicJava)。它是为OpenJDKHotSpot和GraalVM量身定制的KubernetesNative......
  • 理解与使用Javascript中的回调函数
     js里的解释:Acallbackisafunctionthatispassedasanargumenttoanotherfunctionandisexecutedafteritsparentfunctionhascompleted.    从字面上理解下来就是,回调就是一个函数的调用过程。假如函数a有一个参数,这个参数是个函数b,当函数a执行完......
  • 如何用好java的lambda表达式
    Lambda表达式是Java8引入的一种新特性,它使得在Java中能够更加方便地使用函数式编程的思想。Lambda表达式可以简洁地表示一个匿名函数,可以作为参数传递给方法或者作为返回值返回。使用Lambda表达式可以使代码更加简洁、易读,并且能够更好地利用多核处理器的优势。Lambda表达式的基本......