spring boot如何解决跨域

fiy 其他 13

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring Boot可以通过以下方法解决跨域问题:

    1. 使用注解@EnableWebMvc和@Configuration配置类来启用跨域支持。
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins("*")
                    .allowedMethods("*")
                    .allowedHeaders("*")
                    .allowCredentials(true)
                    .maxAge(3600);
        }
    }
    

    该配置类通过addCorsMappings方法添加一个跨域映射,alloweOrigins、allowedMethods、allowedHeaders分别用于配置允许的来源、允许的方法、允许的头信息,allowCredentials用于配置是否允许发送Cookie,maxAge用于配置预检请求的缓存时间。

    1. 基于注解的方式实现跨域配置。

    可以在Controller类或方法上使用@CrossOrigin注解来配置跨域。

    @RestController
    @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST})
    public class MyController {
    
        @GetMapping("/hello")
        public String sayHello() {
            return "Hello, world!";
        }
    }
    

    @CrossOrigin注解允许指定允许的来源和方法。

    1. 自定义Filter实现跨域过滤器。
    @Component
    public class CorsFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Methods", "*");
            response.setHeader("Access-Control-Allow-Headers", "*");
            response.setHeader("Access-Control-Allow-Credentials", "true");
            response.setHeader("Access-Control-Max-Age", "3600");
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }
    

    自定义Filter来设置响应头信息,实现跨域。

    以上是Spring Boot解决跨域问题的几种方式。可以根据具体需求选择合适的方式来解决跨域问题。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring Boot是一个用于构建Java应用程序的开发框架,它提供了很多便捷的功能和工具来简化开发过程。其中包括处理跨域请求的功能。

    跨域请求是指在浏览器中运行的Web应用程序从一个域名向另一个域名发起的请求。由于浏览器的安全策略,跨域请求通常是禁止的。但是有时候我们需要允许跨域请求,这就需要使用一些技术来处理。

    以下是使用Spring Boot解决跨域请求的几种方法:

    1. 使用@CrossOrigin注解:在Controller类或方法上使用@CrossOrigin注解,可以指定允许跨域请求的来源域、允许的HTTP方法和请求头。例如:
    @RestController
    @CrossOrigin(origins = "http://example.com")
    public class MyController {
        // Controller methods
    }
    

    这将允许来自"http://example.com"域的跨域请求。

    1. 使用WebMvcConfigurer接口:创建一个配置类实现WebMvcConfigurer接口,并覆盖addCorsMappings方法。在此方法中,可以配置全局的跨域请求规则。例如:
    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/api/**")
                .allowedOrigins("http://example.com")
                .allowedMethods("GET", "POST")
                .allowCredentials(true);
        }
    }
    

    这将允许来自"http://example.com"域的跨域请求,只限于"/api/"路径下的请求,允许GET和POST方法,并允许发送凭据。

    1. 使用Filter:创建一个Filter来处理跨域请求。在Filter中,可以设置响应头来允许跨域请求。例如:
    @Component
    public class CorsFilter implements Filter {
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            HttpServletResponse res = (HttpServletResponse) response;
            res.setHeader("Access-Control-Allow-Origin", "http://example.com");
            res.setHeader("Access-Control-Allow-Methods", "GET, POST");
            res.setHeader("Access-Control-Allow-Credentials", "true");
            
            chain.doFilter(request, response);
        }
    }
    

    这将允许来自"http://example.com"域的跨域请求,允许GET和POST方法,并允许发送凭据。

    1. 使用CorsFilter类:Spring Boot提供了CorsFilter类来处理跨域请求。可以通过在配置文件中设置cors.allowed.origins和cors.allowed.methods属性来配置允许跨域请求的来源和方法。例如:
    spring:
      security:
        filter:
          cors:
            allowed-origins: http://example.com
            allowed-methods: GET, POST
    

    这将允许来自"http://example.com"域的跨域请求,允许GET和POST方法。

    1. 配置全局的CORS策略:可以通过添加一个Bean来配置全局的CORS策略。例如:
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/api/**")
                    .allowedOrigins("http://example.com")
                    .allowedMethods("GET", "POST")
                    .allowCredentials(true);
            }
        };
    }
    

    这将配置全局的跨域请求规则,允许来自"http://example.com"域的跨域请求,只限于"/api/"路径下的请求,允许GET和POST方法,并允许发送凭据。

    以上是使用Spring Boot解决跨域请求的几种方法。根据具体的需求选择合适的方法来处理跨域请求问题。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    跨域是指在浏览器中,一个域名的网页去请求另一个域名的资源,不同域名之间的请求会受到浏览器的同源策略的限制,跨域请求通常会被浏览器拦截。为了解决跨域问题,可以通过以下几种方式:

    1. 使用Spring Boot的CORS(跨域资源共享)支持:
      在Spring Boot中,可以通过在Controller类或方法上添加@CrossOrigin注解来启用CORS支持。@CrossOrigin注解包含了一些可配置的属性,例如允许的请求来源,允许的请求方法等。

    示例代码:

    @RestController
    @RequestMapping("/api")
    @CrossOrigin(origins = "http://localhost:8081")
    public class MyController {
    
        // rest of the code
    }
    

    上面的示例代码中,@CrossOrigin注解允许来自http://localhost:8081域名的请求访问/api路径下的资源。

    1. 使用拦截器实现跨域处理:
      可以自定义一个拦截器,在拦截器中添加相关的处理逻辑来处理跨域请求。拦截器可以在请求到达Controller之前进行拦截处理。

    示例代码:

    @Component
    public class CorsInterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            response.setHeader("Access-Control-Allow-Origin", "http://localhost:8081");
            response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
            return true;
        }
    }
    

    上面的示例代码中,通过在preHandle方法中设置响应头来实现跨域处理。Access-Control-Allow-Origin表示允许的请求来源,Access-Control-Allow-Methods表示允许的请求方法。

    1. 使用全局配置来解决跨域问题:
      可以通过在Spring Boot的配置文件中添加全局配置来解决跨域问题。

    示例配置:

    # application.properties
    spring.mvc.dispatch-options-request=true
    spring.web.cors.allow-origin=*
    spring.web.cors.allow-credentials=true
    spring.web.cors.allow-methods=GET,POST,PUT,DELETE
    spring.web.cors.allow-headers=*
    spring.web.cors.max-age=3600
    

    上面的示例配置中,spring.web.cors.allow-origin设置为*表示允许所有的请求来源,spring.web.cors.allow-methods表示允许的请求方法。

    总结:

    • 使用@CrossOrigin注解可以在Controller类或方法上添加跨域支持。
    • 使用拦截器可以实现对跨域请求的拦截处理。
    • 使用全局配置可以配置全局的跨域支持。

    以上是Spring Boot解决跨域问题的几种方法,根据实际需求选择合适的方法即可。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部