优秀的编程知识分享平台

网站首页 > 技术文章 正文

若依开发框架解析笔记(8)-跨域的处理

nanyue 2024-09-02 19:09:40 技术文章 5 ℃

本篇笔记比较简单,主要介绍一下若依框架是如何处理跨域的。

首先简单介绍一下跨域这个概念。跨域是浏览器中的一种安全措施。浏览器会对网页中的js脚本中发起的请求进行检测,如果发起的请求和当前协议,端口,地址不同的话会进行限制,目的还是为了保证安全性。

前后端分离的框架中,前端服务器和后端服务器一般都是独立部署,一起部署的话至少也是不同端口,如果js中直接朝后台发起请求,那势必会造成跨域。

首先看一下后端代码中的配置:

在配置类ResourcesConfig中定义了一个corsFilter来和配合SpringSecurity使用,里面有很多关于跨域上面的配置,作者原始的配置没有对请求头和请求方法做任何的限制,不会对任何请求有跨域上的限制。

    @Bean
    public CorsFilter corsFilter()
    {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        // 设置访问源地址
        config.addAllowedOriginPattern("*");
        // 设置访问源请求头
        config.addAllowedHeader("*");
        // 设置访问源请求方法
        config.addAllowedMethod("*");
        // 有效期 1800秒
        config.setMaxAge(1800L);
        // 添加映射路径,拦截一切请求
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        // 返回新的CorsFilter
        return new CorsFilter(source);
    }

如果修改一下配置例如:config.addAllowedMethod("get"),这样子post请求的跨域请求就不被允许。这样的写法比用注解加在每个Restcontroller上面要来的方便,维护起来也更加容易。

其实在本地的开发环境中,前端项目里面配置了代理,类似与nginx一样,通过代理来转发请求,从而保持了协议,地址和端口的一致性,从而避免了跨域。

  devServer: {
    host: '0.0.0.0',
    port: port,
    open: true,
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: `http://localhost:8080`,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      }
    },

Tags:

最近发表
标签列表