资讯专栏INFORMATION COLUMN

spring-boot跨域

tomato / 2612人阅读

摘要:无拦截器一般情况下直接用就可以搞定了有拦截器比如需要对用户身份进行验证浏览器在发送请求时可能这个我还要去一下不会带上验证信息在拦截器那里就没通过进而结束请求而前面方法的执行是在拦截器后面不会起作用当然在拦截器那里判断如果是方法就通过也没问题

无拦截器 @CrossOrigin

一般情况下,直接用@CrossOrigin就可以搞定了

    @CrossOrigin(origins = "http://localhost:8080")
    @RequestMapping(value = "/cors", method = RequestMethod.GET)
    public Object cors(){
        ...
    }
JavaConfig
@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/cors");
    }

}
有拦截器

比如需要对用户身份进行验证

@Component
public class AuthInterceptor extends HandlerInterceptorAdapter{

    private static final Logger logger= LoggerFactory.getLogger(AuthInterceptor.class);

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
        String _authorization = request.getHeader("Authorization");
        logger.info("authorization:{}",_authorization);
        if(_authorization!=null){
            request.setAttribute("authorization",_authorization);
            return true;
        }else{
            response.setStatus(403);
            return false;
        }
    }

}

浏览器在发送OPTION请求时,可能(这个我还要去google一下)不会带上验证信息,在拦截器那里就没通过,进而结束请求.而前面方法的执行是在拦截器后面,不会起作用.(当然在拦截器那里判断,如果是OPTION方法就通过,也没问题)
这就需要另一种方法

@Configuration
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private AuthInterceptor authInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authInterceptor);
    }

    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        source.registerCorsConfiguration("/cors", config);
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }

}

这个过滤器会在执行拦截器前面执行

下载

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/66989.html

相关文章

  • 使用Docker部署Spring-Boot+Vue博客系统

    摘要:先来看一下容器的文件中间一些操作省略这里用了多阶段构建容器,如果直接通过设置环境变量只会在后面一个阶段生效,但是是在第一个阶段执行的,所以环境变量不能应用到当中。 在今年年初的时候,完成了自己的个Fame博客系统的实现,当时也做了一篇博文Spring-boot+Vue = Fame 写blog的一次小结作为记录和介绍。从完成实现到现在,也断断续续的根据实际的使用情况进行更新。 只不过每...

    Eirunye 评论0 收藏0
  • 《从零构建前后分离 WEB 项目》 序 :开源的意义

    摘要:从前端到后端到运维,经历了几次前后端架构的演变,踩了无数的坑,度过无数难免的夜。为了工作或学习,确实造过一些轮子,前端的后端的,也开源出来过觉得能提高生产力的。 showImg(https://segmentfault.com/img/bVbgeXP?w=713&h=275); 序: 开源的意义 本系列提前首发地址 背景 从事了近4年的互联网行业,逐渐担当过团队的前端到后端的负责人,和...

    J4ck_Chan 评论0 收藏0
  • 《从零构建前后分离 WEB 项目》 序 - 开源的意义

    摘要:尽量按照前端后端部署运维来讲,当然中途涉及到跨域这种前后协调的还是无法避免捎带一笔。关于我目前在写从零构建前后分离项目系列,修正和补充以此为准不断更新的项目实践地址彩蛋提前预览下一章传送门 序: 开源的意义 本系列提前首发地址 背景 从事了近4年的互联网行业,逐渐担当过团队的前端到后端的负责人,和大家一样从小白逐渐的成长起来,回首望去几年前的博客还是那么稚嫩。 回首这几年: 从一个ja...

    seasonley 评论0 收藏0
  • SpringBoot 入门简介

    摘要:这里使用的是数据库启动类上加上注解在启动类中添加对包扫描扫描多个包下的可以有以下几种方法扫描会自动加载相关配置,数据源就会自动注入到中,会自动注入到中,可以直接使用。有配置文件下的使用扫描多个包下的可以有以下几种方法扫描 Spring-Boot 学习笔记 1 Spring-Boot 介绍 1.1 什么是Spring-Boot Spring-Boot是由Pivotal团队提供的全新框架...

    chuyao 评论0 收藏0
  • 跨域问题的一次深入研究

    摘要:前言最近在业务代码中深受跨域问题困扰,因此特别写一篇博客来记录一下自己对跨域的理解以及使用到的参考资料。内嵌式跨域通常也是允许的。而我使用时因为这个响应报文最后被认为是跨域问题,无法从中获得的状态码。它代表服务器支持跨域时携带认证信息。 前言 最近在业务代码中深受跨域问题困扰,因此特别写一篇博客来记录一下自己对跨域的理解以及使用到的参考资料。本文的项目背景基于vue+vuex+axio...

    X_AirDu 评论0 收藏0

发表评论

0条评论

tomato

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<