百木园-与人分享,
就是让自己快乐。

spring boot 跨域

spring boot提供了两种跨域配置方式
1.全局跨域
2.局部跨域

全局跨域

package com.tons.config;

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 CorsConfig implements WebMvcConfigurer {
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping(\"/**\") // 所有mapping路径
                .allowedOriginPatterns(\"*\") // 所有域 spring-boot 2.4.0及以下使用.allowedOrigins(\"*\")
                .allowedMethods(\"POST\",\"GET\",\"PUT\",\"DELETE\",\"OPTIONS\") // 请求方式
                .allowedHeaders(\"*\") // 所有方法头
                .maxAge(168000) // 等待间隔时间(时间过了则需再次认证)
                .allowCredentials(true); // cookie
    }
}

局部跨域。使用CrossOrigin注解,可修饰类或者方法。

@PostMapping(\"/log\")
@ResponseBody
@CrossOrigin
public String logPost(@RequestBody JSONObject json, HttpSession session) {
    String username = json.getString(\"username\");
    String password = json.getString(\"password\");
    User user = userService.getUserById(username, password);
    if (user == null) return RestResult.Error(\"账号或者密码错误!\");
    session.setAttribute(\"user\", user);
    return RestResult.OK(UserTokenUtils.encodeUserToKen(user));
}

需要注意的是既是后端开启跨域并允许携带cookie,但是前端每次访问后端cookie还是会不断变化。导致HttpSession无法使用
如果想使用HttpSession(后端做无状态服务器,就不用HttpSession。转而使用JWT技术),就需要
1.每次请求携带cookie

// 这是ajax请求使用axios.js
axios.defaults.withCredentials = true // axios发送请求带上cookie,有cookie就有session_id

2.设置反向代理
开发阶段 vue-cli

devServer: {
  port: 8080,
  // 设置代理
  proxy: {
      // 替换了axios请求中的/api
    \'/api\': {
      // 代理地址,这里设置的地址会代替axios中设置的baseURL
      target: \'http://192.168.100.213:8088/\',
      // 如果接口跨域,需要进行这个参数配置
      changeOrigin: true,
      ws: true,
      pathRewrite: {
        \'^/api\': \'\'
      }
    }
  }
}

生产阶段 ngnix

server {
    listen       80;
    server_name  localhost;
    location / {
    root   html;
    index  index.html index.htm;
    }
    # 配置代理
    location /api/ {
    proxy_pass          http://192.168.100.159:8088/;
    proxy_set_header        Host 127.0.0.1;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

来源:https://www.cnblogs.com/heirem/p/16977847.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » spring boot 跨域

相关推荐

  • 暂无文章