SpringBoot跨域的几种解决方案

SpringBoot跨域的几种解决方案SpringBoot跨域请求处理方式方法一、SpringBoot的注解@CrossOrigin(也支持SpringMVC)简单粗暴的方式,Controller层在需要跨域的类或者方法上加上该注解即可@RestController@CrossOrigin@RequestMapping(“/situation”)publicclassSituationControllerextendsPublicUtilController{@AutowiredprivateSit

大家好,又见面了,我是你们的朋友全栈君。

SpringBoot跨域请求处理方式

方法一、SpringBoot的注解@CrossOrigin(也支持SpringMVC)

简单粗暴的方式,Controller层在需要跨域的类或者方法上加上该注解即可

@RestController
@CrossOrigin
@RequestMapping("/situation")
public class SituationController extends PublicUtilController { 
   

    @Autowired
    private SituationService situationService;
    // log日志信息
    private static Logger LOGGER = Logger.getLogger(SituationController.class);
    
}

但每个Controller都得加,太麻烦了,怎么办呢,加在Controller公共父类(PublicUtilController)中,所有Controller继承即可。

@CrossOrigin
public class PublicUtilController { 
   

    /** * 公共分页参数整理接口 * @param currentPage * @param pageSize * @return */
    public PageInfoUtil proccedPageInfo(String currentPage, String pageSize) { 
   

        /* 分页 */
        PageInfoUtil pageInfoUtil = new PageInfoUtil();
        try { 
   
            /* * 将字符串转换成整数,有风险, 字符串为a,转换不成整数 */
            pageInfoUtil.setCurrentPage(Integer.valueOf(currentPage));
            pageInfoUtil.setPageSize(Integer.valueOf(pageSize));
        } catch (NumberFormatException e) { 
   
        }
        return pageInfoUtil;
    }
}

当然,这里虽然指SpringBoot,SpringMVC也是同样的,但要求在Spring4.2及以上的版本。

另外,如果SpringMVC框架版本不方便修改,也可以通过修改tomcat的web.xml配置文件来处理

SpringMVC使用@CrossOrigin使用场景要求

jdk1.8+
Spring4.2+

方法二、处理跨域请求的Configuration

增加一个配置类,CrossOriginConfig.java。继承WebMvcConfigurerAdapter或者实现WebMvcConfigurer接口,其他都不用管,项目启动时,会自动读取配置。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/** * AJAX请求跨域 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter { 
   
    static final String ORIGINS[] = new String[] { 
    "GET", "POST", "PUT", "DELETE" };
    @Override
    public void addCorsMappings(CorsRegistry registry) { 
   
        registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);
    }

方法三、采用过滤器(filter)的方式

同方法二加配置类,增加一个CORSFilter 类,并实现Filter接口即可,其他都不用管,接口调用时,会过滤跨域的拦截。

@Component
public class CORSFilter implements Filter { 
   

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException { 
   
        HttpServletResponse res = (HttpServletResponse) response;
        // 设置允许Cookie
        res.addHeader("Access-Control-Allow-Credentials", "true");
        // 允许http://www.xxx.com域(自行设置,这里只做示例)发起跨域请求
        res.addHeader("Access-Control-Allow-Origin", "*");
        // 设置允许跨域请求的方法
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        // 允许跨域请求包含content-type
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
        if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) { 
   
            response.getWriter().println("ok");
            return;
        }
        chain.doFilter(request, response);
    }
    
    @Override
    public void destroy() { 
   
    }
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException { 
   
    }
}

方法四、采用nginx做动态代理

源于:IT老哥

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149342.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pcep协议什么意思_SDN学习笔记

    pcep协议什么意思_SDN学习笔记SDN什么是SDNSDN是一种框架和思想,核心诉求是通过软件控制网络,实现业务的自动化部署,为方便软件来控制网络,希望控制面和转发面是分离的。例如,传统的交换机内部,由交换机负责具体的网络流量往哪里转发,在SDN中,有一个控制器进行流量转发的计算,然后将结果发送给交换机,交换机只进行简单的转发,从分布式的控制转发过程称为集中式的控制,使得控制和转发平面相分离。SDN的特点网络开放可编程、数控分离(…

  • java cap理论_架构思想之CAP原理

    java cap理论_架构思想之CAP原理由于自己负责后端的设计已经有一段时间,对设计的一些思想和理论有一些理解,但最近被问到什么是CAP时,却一脸懵逼,下来后专门针对CAP架构思想进行了一些专题学习,在这里也将这个概念引入给大家,大家可以有意识地了解和学习这个思想理念,帮助自己在后续设计功能时有更好的参考。分布式领域CAP理论,Consistency(一致性),数据一致更新,所有数据变动都是同步的Availability(可用性),…

  • mshta 反弹shell

    mshta 反弹shell  kali系统准备:  复制以下ruby代码到/usr/share/metasploit-framework/modules/exploits/windows/smb/msh_shell.rb目录(要注意代码缩进哦):###ThismodulerequiresMetasploit:https://metasploit.com/download#Currentso…

  • 简易的倒计时代码_简单的网页代码

    简易的倒计时代码_简单的网页代码在一些活动项目中,大多会涉及倒计时。以下为倒计时代码,供小白参考。关键词:计时器、时间差具体代码如下:<!DOCTYPEhtml><html> <head> <metacharset="utf-8"/> <title>倒计时代码</title> <styletype="te

  • ubuntu更新源[通俗易懂]

    ubuntu更新源[通俗易懂]http://blog.csdn.net/pangchengyong0724/article/details/52452878http://blog.csdn.net/wangweiqiang1325/article/details/53447123texiao转载请注明出处转载请注明出处转载请注明出处在输入sudoapt-getupdate出现暂时不

  • pycharm2018激活码 pycharm激活码_软件一键无痕看怎么使用的

    pycharm2018激活码 pycharm激活码_软件一键无痕看怎么使用的PyCharm激活码最新破解教程,Mac版激活至2299年,PyCharm激活码2021.3.3

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号