ubuntu

如何解决Ubuntu Tomcat的跨域问题

小樊
50
2025-03-18 01:25:48
栏目: 智能运维

在Ubuntu上部署Tomcat并解决跨域问题,可以通过以下几种方法进行配置:

方法一:使用CORS Filter

  1. 下载CORS Filter

    • 需要下载 cors-filter-2.5.jarjava-property-utils-1.9.11.jar 这两个jar包。
  2. 放置jar包

    • 将这两个jar包放置在Tomcat安装目录下的 lib 文件夹中。
  3. 修改 web.xml 文件

    • 打开Tomcat安装目录下的 conf 文件夹,找到 web.xml 文件。
    • web.xml 文件中添加如下配置:
<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposedHeaders</param-name>
        <param-value>Set-Cookie</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 重启Tomcat
    • 修改完配置文件后,重启Tomcat服务以使配置生效。

方法二:全局CORS配置(适用于Spring Boot项目)

如果你使用的是Spring Boot项目,可以通过全局配置CORS来解决跨域问题:

  1. 实现 WebMvcConfigurer 接口
    • 在你的Spring Boot配置类中实现 WebMvcConfigurer 接口,并重写 addCorsMappings 方法。
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://example.com")
                .allowedMethods("GET", "POST", "PUT", "DELETE")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}
  1. 使用 @CrossOrigin 注解
    • 在控制器类或方法上使用 @CrossOrigin 注解来配置跨域。
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin(origins = "http://example.com")
public class MyController {
    @GetMapping("/greet")
    public String greet() {
        return "Hello World";
    }
}

方法三:自定义过滤器

通过自定义过滤器来实现跨域请求的处理:

  1. 创建CORS过滤器
    • 创建一个实现 Filter 接口的类,例如 CORSFilter
import javax.servlet.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CORSFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        chain.doFilter(req, res);
    }

    @Override
    public void init(FilterConfig filterConfig) {}

    @Override
    public void destroy() {}
}
  1. 配置过滤器
    • web.xml 文件中配置过滤器。
<filter>
    <filter-name>CORSFilter</filter-name>
    <filter-class>com.example.CORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 重启Tomcat
    • 修改完配置文件后,重启Tomcat服务以使配置生效。

通过以上方法,可以有效解决Ubuntu上Tomcat的跨域问题。选择适合你项目的方法进行配置即可。

0
看了该问题的人还看了