SpringBoot跨域

编程

package com.wzq.test.action;

import com.wzq.utils.BatchDownFilesUtils;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.CrossOrigin;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import java.io.*;

import java.nio.file.Files;

import java.util.ArrayList;

import java.util.List;

/**

* @description: 测试Controller

* @author: Wzq

* @create: 2019-11-25 10:19

*/

@CrossOrigin(origins = "*")

@RestController

@RequestMapping(value = "test")

public class TestController{

@RequestMapping(value = "/test.do")

public String test(){

return "test";

}

}

这种方式对于整个项目都要跨域,那么每个类上都要加@CrossOrigin元注解,比较麻烦,下面讲解下全局跨域配置。

第二种 拦截器的方式

packagecom.wzq;

importorg.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

importorg.springframework.boot.web.servlet.FilterRegistrationBean;

importorg.springframework.context.annotation.Bean;

importorg.springframework.web.cors.CorsConfiguration;

importorg.springframework.web.cors.UrlBasedCorsConfigurationSource;

importorg.springframework.web.filter.CorsFilter;

@SpringBootApplication

publicclassMyprojectApplication{

publicstaticvoidmain(String[] args){

SpringApplication.run(MyprojectApplication.class, args);

}

@Bean

publicFilterRegistrationBeancorsFilter(){

UrlBasedCorsConfigurationSource source =newUrlBasedCorsConfigurationSource();

CorsConfiguration config =newCorsConfiguration();

config.setAllowCredentials(true);

config.addAllowedOrigin("*");

config.addAllowedHeader("*");

config.addAllowedMethod("*");

source.registerCorsConfiguration("/**", config);// CORS 配置对所有接口都有效

FilterRegistrationBean bean =newFilterRegistrationBean(newCorsFilter(source));

bean.setOrder(0);

return bean;

}

}

第三种 集成WebMvcConfigurerAdapter类重写 addCorsMappings方法

package com.meeno.wzq;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.CorsRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**

* @Auther: Wzq

* @Date: 2019/4/11 18:30

* @Description: 天青色等烟雨,而我在等你.. -- CORSConfiguration

*/

@Configuration

public class CORSConfiguration extends WebMvcConfigurerAdapter{

@Override

public void addCorsMappings(CorsRegistry registry){

registry.addMapping("/**")

.allowedMethods("*")

.allowedOrigins("*")

.allowedHeaders("*");

super.addCorsMappings(registry);

}

}

第三种有个问题,session无法共享!

第四种 使用nginx代理 把前端项目和服务端api接口地址,保持在同一个ip和端口中

完整的nginx配置如下:

#user nobody;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

#log_format main "$remote_addr - $remote_user [$time_local] "$request" "

# "$status $body_bytes_sent "$http_referer" "

# ""$http_user_agent" "$http_x_forwarded_for"";

#access_log logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;

server {

listen 20684;

server_name inner.meeno.net;

#charset koi8-r;

#access_log logs/host.access.log main;

location /trainsys {

#root html;

#index index.html index.htm;

client_max_body_size 100000m;

proxy_set_header Host $host;

proxy_set_header X-Real-Ip $remote_addr;

proxy_set_header X-Forwarded-For$remote_addr;

proxy_pass http://inner.meeno.net:20681/trainsys/;

}

location /dist {

root E:svnResourseprogramwebTwosysBankAdmin-Vue;

index index.html index.htm;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

#

error_page 500502503504/50x.html;

location =/50x.html {

root html;

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ .php$ {

# proxy_pass http://127.0.0.1;

#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ .php$ {

# root html;

# fastcgi_pass 127.0.0.1:9000;

# fastcgi_index index.php;

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

# include fastcgi_params;

#}

# deny access to .htaccess files, if Apache"s document root

# concurs with nginx"s one

#

#location ~ /.ht {

# deny all;

#}

}

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

# listen 8000;

# listen somename:8080;

# server_name somename alias another.alias;

# location / {

# root html;

# index index.html index.htm;

# }

#}

# HTTPS server

#

#server {

# listen 443 ssl;

# server_name localhost;

# ssl_certificate cert.pem;

# ssl_certificate_key cert.key;

# ssl_session_cache shared:SSL:1m;

# ssl_session_timeout 5m;

# ssl_ciphers HIGH:!aNULL:!MD5;

# ssl_prefer_server_ciphers on;

# location / {

# root html;

# index index.html index.htm;

# }

#}

}

主要看这段:

listen 8080;#端口

server_name 127.0.0.1;#ip或域名

#服务端api基地值

location /trainsys {

#root html;

#index index.html index.htm;

client_max_body_size 100000m;

proxy_set_header Host $host;

proxy_set_header X-Real-Ip $remote_addr;

proxy_set_header X-Forwarded-For$remote_addr;

proxy_pass http://inner.meeno.net:20681/trainsys/;

}

#web端项目映射地址

location /dist {

root E:svnResourseprogramwebTwosysBankAdmin-Vue;

index index.html index.htm;

}

个人微信公众,经常更新一些实用的干货:

 

 

以上是 SpringBoot跨域 的全部内容, 来源链接: utcz.com/z/513270.html

回到顶部