解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
在Spring MVC中,解决跨域问题通常涉及到配置Spring的CORS支持。以下是一个配置跨域的示例:
import org.springframework.context.annotation.Bean;
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 WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 对所有路径应用跨域配置
.allowedOrigins("http://localhost:3000") // 允许的源
.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的方法
.allowedHeaders("*") // 允许的头
.allowCredentials(true); // 是否允许凭据
}
}
在这个配置中,我们允许了来自http://localhost:3000
的跨域请求,并且对所有路径和方法进行了配置。这样,来自前端应用的请求就可以正确地跨域访问后端的Spring MVC控制器。
对于静态资源的跨域问题,可以在Tomcat的配置文件web.xml
中添加一个Filter
来处理静态资源的跨域请求。以下是一个配置静态资源跨域的示例:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>http://localhost:3000</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在这个配置中,我们同样允许来自http://localhost:3000
的跨域请求,并且对所有路径的静态资源进行了配置。这样,前端应用就可以正确地跨域访问Tomcat服务器上的静态资源。
评论已关闭