java 跨域问题

我用的是spring MVC加maven的,废话不多说,来看代码

pom.xml中加入这些

<!-- 跨域过滤器相关 -->  
           <dependency>  
               <groupId>com.thetransactioncompany</groupId>  
               <artifactId>Java-property-utils</artifactId>  
               <version>1.9</version>  
           </dependency>  
           <dependency>  
               <groupId>com.google.code.gson</groupId>  
               <artifactId>gson</artifactId>  
               <version>2.6.2</version>  
           </dependency>  
           <!-- https://mvnrepository.com/artifact/com.thetransactioncompany/cors-filter -->
        <dependency>
           <groupId>com.thetransactioncompany</groupId>
           <artifactId>cors-filter</artifactId>
           <version>1.3.2</version>
        </dependency>
        <!-- 跨域过滤器相关 -->  

web.xml中加入

<!-- ajax跨域 -->
    <filter>  
        <filter-name>CORS</filter-name>  
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>  
        <init-param>  
         <param-name>cors.allowOrigin</param-name>  
            <param-value>*</param-value>  
        </init-param>  
        <init-param>  
         <param-name>cors.supportedMethods</param-name>  
            <param-value>GET, POST, HEAD, PUT, DELETE</param-value>  
        </init-param>  
        <init-param>  
         <param-name>cors.supportedHeaders</param-name>  
            <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>  
        </init-param>  
        <init-param>  
            <param-name>cors.exposedHeaders</param-name>  
            <param-value>Set-Cookie</param-value>  
        </init-param>  
        <init-param>  
            <param-name>cors.supportsCredentials</param-name>  
            <param-value>true</param-value>  
        </init-param>  
    </filter>
    <filter-mapping>  
        <filter-name>CORS</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>
   <!-- ajax跨域 -->

后台controller中加入这些

 

其中@CrossOrigin(origins = "*", maxAge = 3600)  表示当前类中的所有方法允许所有跨域访问,这里要强调的是springMVC的版本要在4.2或以上版本才支持@CrossOrigin。这里指定传参格式为json类型,在页面ajax中请求访问有几个注意的地方。

一个是contentType需要指定json类型,另一个就是传json数据时要使用JSON.stringfy(),不然后台接收不到数据。

 

如果还有别的方法,欢迎分享。我的QQ:1509261494

### Java 问题解决方案:CORS 配置 资源共享 (Cross-Origin Resource Sharing, CORS) 是一种机制,它通过额外的 HTTP 头来告知浏览器哪些资源可以被访问以及如何访问这些资源。当客户端尝试从不同的源请求数据时,服务器可以通过设置特定的响应头允许或拒绝该请求。 #### 使用 Spring Boot 实现 CORS 的方法 Spring Framework 提供了多种方式实现 CORS 支持。以下是几种常见的配置方案: #### 方法一:全局配置 CORS 可以在 `WebConfig` 类中定义一个 WebMvcConfigurer 来启用全局 CORS 支持[^1]。 ```java 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("/**") // 所有路径都支持CORS .allowedOrigins("*") // 允许所有来源 .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法 .allowedHeaders("*"); // 允许所有的头部信息 } }; } } ``` #### 方法二:局部配置 CORS 如果只需要为某些控制器或者接口开启 CORS,则可以直接在类级别或方法级别上使用 `@CrossOrigin` 注解[^2]。 ```java import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @CrossOrigin(origins = "http://example.com", maxAge = 3600) public class MyController { @GetMapping("/data") public String getData() { return "This is cross-origin data"; } } ``` #### 方法三:手动处理 CORS 响应头 对于更复杂的场景,可能需要自定义 CORS 行为,在拦截器或过滤器中添加必要的响应头[^3]。 ```java import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @Component public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } } ``` 以上三种方法都可以有效解决 Java 应用中的问题,具体选择取决于项目需求和技术架构设计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值