java解决请求跨域的两种方法

 更新时间:2019年08月22日 14:34:58   作者:gavin.liao  
这篇文章主要为大家详细介绍了java解决请求跨域的两种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

java解决请求跨域问题,有以下两种写法

1.使用拦截器,实现javax.servlet.Filter接口

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.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;

@WebFilter(filterName="CorsFilter" , urlPatterns="*.do")
public class CorsFilter implements Filter{

 @Override
 public void destroy() {
 }

 @Override
 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
 throws IOException, ServletException {
 HttpServletResponse response = (HttpServletResponse) resp; 
 response.setHeader("Access-Control-Allow-Origin", "*"); //解决跨域访问报错 
  response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE"); 
  response.setHeader("Access-Control-Max-Age", "3600"); //设置过期时间 
  response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization"); 
  response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // 支持HTTP 1.1. 
  response.setHeader("Pragma", "no-cache"); // 支持HTTP 1.0. response.setHeader("Expires", "0"); 
  chain.doFilter(req, resp); 
 
 }

 @Override
 public void init(FilterConfig arg0) throws ServletException {
 }
}

如果想用xml的形式配置拦截器,可以删除@WebFilter(filterName="CorsFilter" , urlPatterns="*.do"),然后在web.xml中添加下面的配置

<filter>
 <filter-name>CorsFilter</filter-name>
 <filter-class>com.huaming.filter.CorsFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>CorsFilter</filter-name>
 <url-pattern>*.do</url-pattern>
</filter-mapping>

2.使用注解的形式,配置org.springframework.web.filter.CorsFilter,通常springboot项目多数使用这种方式

import org.springframework.web.filter.CorsFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

/**
 * 解决跨域问题springboot所需配置
 */
@Configuration
public class CORSConfiguration {
 
 @Bean
 public CorsFilter corsFilter() {
 //1.添加CORS配置信息
 CorsConfiguration config = new CorsConfiguration();
 //1) 允许的域,不要写*,否则cookie就无法使用了
 config.addAllowedOrigin("*");
 config.addAllowedHeader("*"); // 允许任何头
 config.addAllowedMethod("*"); // 允许任何方法(post、get等)
 //2) 是否发送Cookie信息
 config.setAllowCredentials(true);
 //3) 允许的请求方式
 config.addAllowedMethod("OPTIONS");
 config.addAllowedMethod("HEAD");
 config.addAllowedMethod("GET");
 config.addAllowedMethod("PUT");
 config.addAllowedMethod("POST");
 config.addAllowedMethod("DELETE");
 config.addAllowedMethod("PATCH");
 // 4)允许的头信息
 config.addAllowedHeader("*");

 // 5)配置有效时长
 config.setMaxAge(3600*24L);

 //2.添加映射路径,我们拦截一切请求
 UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
 configSource.registerCorsConfiguration("/**", config);

 //3.返回新的CorsFilter.
 return new CorsFilter(configSource); 
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java实现上传网络图片到七牛云存储详解

    Java实现上传网络图片到七牛云存储详解

    这篇文章主要为大家详细介绍了Java如何实现上传网络图片到七牛云存储,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-12-12
  • java.lang.ClassCastException的问题解决

    java.lang.ClassCastException的问题解决

    本文主要介绍了java.lang.ClassCastException的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • Java获取当前时间方法总结

    Java获取当前时间方法总结

    本篇文章给大家整理了关于Java获取当前时间方法,以及相关代码分享,有需要的朋友测试参考下吧。
    2018-02-02
  • JAVA中常见异常类

    JAVA中常见异常类

    本文主要介绍了JAVA中的常见异常类。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • SpringAop源码及调用过程概述

    SpringAop源码及调用过程概述

    这篇文章主要介绍了SpringAop源码及调用过程概述,Spring AOP(面向切面编程)是Spring框架的一个重要特性,它提供了一种在程序运行期间动态地将额外的行为织入到代码中的方式,需要的朋友可以参考下
    2023-10-10
  • java跳出多重循环的三种实现方式

    java跳出多重循环的三种实现方式

    文章主要介绍了Java中跳出多重循环的三种方式:使用`break`配合标签、在布尔表达式中添加判断变量、以及使用`try-catch`制造异常,每种方式都有具体的代码示例,并输出了相应的执行结果
    2025-01-01
  • java连接Oracle数据库的方法解析

    java连接Oracle数据库的方法解析

    本文主要对java连接Oracle数据库方法进行步骤解析,具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • 使用Mybatis生成树形菜单的方法详解

    使用Mybatis生成树形菜单的方法详解

    开发中我们难免会遇到各种树形结构展示的场景,比如用户登录系统后菜单的展示等,本文为大家整理了使用Mybatis生成树形菜单的方法,感兴趣的小伙伴可以了解一下
    2023-06-06
  • 在controller中如何设置接收参数的默认值

    在controller中如何设置接收参数的默认值

    这篇文章主要介绍了在controller中如何设置接收参数的默认值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • JVM完全解读之GC日志记录分析

    JVM完全解读之GC日志记录分析

    这篇文章主要介绍了JVM完全解读之GC日志记录分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-01-01

最新评论