spring如何跨域访问

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring 如何跨域访问?

    要实现跨域访问,Spring 提供了多种方法,以下是其中两个较为常用的方法:

    方法一:使用 @CrossOrigin 注解

    在需要跨域访问的 Controller 类或方法上使用 @CrossOrigin 注解。@CrossOrigin 注解有以下几个可配置的属性:

    • origins:指定允许访问的源地址,可以是具体的域名或者通配符。例如,"http://example.com" 或 "*"。
    • maxAge:指定预检请求的有效时间,单位为秒。默认为 1800 秒。
    • allowedHeaders:指定允许的请求头,多个请求头可以用逗号分隔。
    • allowCredentials:指定是否允许发送 Cookie。默认为 false。

    示例:

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

    方法二:使用 WebMvcConfigurerAdapter 配置

    在 Spring Boot 2.x 版本之前,可以继承 WebMvcConfigurerAdapter 类并重写 addCorsMappings 方法来配置跨域访问。示例代码如下:

    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/api/**")
                    .allowedOrigins("http://example.com")
                    .allowedMethods("GET", "POST")
                    .allowedHeaders("Content-Type")
                    .allowCredentials(true)
                    .maxAge(3600);
        }
    }
    

    上述代码配置了允许对 "/api/**" 路径下的请求进行跨域访问,只允许来自 "http://example.com" 的请求,并且只允许 GET 和 POST 方法,允许发送的请求头为 "Content-Type",允许发送 Cookie,并设置预检请求的有效时间为 3600 秒。

    通过以上两种方法之一,即可实现在 Spring 中进行跨域访问。

    1年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在Spring应用程序中实现跨域访问有多种方法。下面是五种常用的方法:

    1. 使用CORS(跨域资源共享):CORS是一种基于HTTP头的机制,它允许服务器告诉浏览器是否允许跨域请求。在Spring应用程序中实现CORS,可以通过使用@CrossOrigin注解或配置CorsFilter过滤器来完成。使用@CrossOrigin注解可以直接在控制器方法上指定允许的来源、方法和头信息。如果希望在整个应用程序中启用CORS,可以使用CorsFilter过滤器配置跨域规则。

    2. JSONP(JSON with Padding):JSONP是一种利用

    3. 代理服务器:可以使用代理服务器来实现跨域访问。客户端发送请求到代理服务器,代理服务器再将请求转发给目标服务器,并将目标服务器的响应返回给客户端。在Spring应用程序中,可以使用Spring Cloud Gateway或Nginx等代理服务器来实现跨域访问。

    4. CORS过滤器:可以使用Spring的过滤器来实现CORS。通过配置一个过滤器,在每个请求到达控制器方法之前,过滤器会检查请求的来源,如果发现是跨域请求,则在响应头中添加相应的信息,告诉浏览器允许访问。

    5. 使用WebSocket:WebSocket是一种全双工通信的协议,可以在客户端和服务器之间建立持久连接。通过WebSocket,可以在Spring应用程序中实现跨域通信。在客户端和服务器上分别实现WebSocket的处理程序,通过建立WebSocket连接进行双向通信,不受同源策略的限制。

    无论选择哪种方法,都要注意安全性和性能问题。跨域访问可能导致安全漏洞,因此要确保只允许信任的域名进行跨域访问。此外,性能也是需要考虑的因素,跨域请求可能会增加延迟,所以需要权衡利弊,并针对实际情况选择适合的方法。

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

    一、跨域访问概述
    跨域访问(Cross-Origin Resource Sharing,CORS)是指在浏览器中,当前页面的 JavaScript 代码向不同源(即不同的域名、协议或端口)发起请求时,浏览器会根据同源策略(Same-origin policy)限制这次请求的访问。这意味着如果 JavaScript 代码想要与不同源的服务器进行交互,必须通过特定的协议和方法来实现。
    Spring 提供了一种简单的方式来处理跨域请求,即通过添加注解或配置 CORS 过滤器来实现。

    二、Spring 实现跨域访问的方式

    1. 使用 @CrossOrigin 注解
      通过在 Controller 的某个方法上添加 @CrossOrigin 注解,可以允许该方法处理来自其他源的请求。
    @RestController
    public class MyController {
    
        @CrossOrigin(origins = "http://localhost:8080")
        @GetMapping("/api/data")
        public String getData() {
            // 处理请求
            return "data";
        }
    }
    

    在上述示例中,@CrossOrigin(origins = "http://localhost:8080") 允许来自 http://localhost:8080 的请求访问 getData() 方法。你可以根据实际需要灵活地配置 @CrossOrigin 注解的参数。

    1. 配置 CORS 过滤器
      通过配置 Spring 的 CORS 过滤器,可以全局地处理跨域请求。在 Spring Boot 中,可以通过添加以下配置类来自定义 CORS 过滤器。
    @Configuration
    public class CorsConfig {
    
        @Bean
        public CorsFilter corsFilter() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("http://localhost:8080");
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.addAllowedHeader("*");
            
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", corsConfiguration);
            
            return new CorsFilter(source);
        }
    }
    

    上述示例中,我们使用 CorsConfiguration 对象来配置允许的来源、方法和请求头。然后,将其注册到 UrlBasedCorsConfigurationSource 对象中,并将该对象作为参数创建 CorsFilter 对象。最后,将 CorsFilter 注册为 Spring 的过滤器。

    三、Spring Security 中的跨域访问配置
    在使用 Spring Security 进行安全认证时,需要额外配置跨域访问。

    1. 使用 HttpSecurity 配置
      在 Spring Security 的配置类中,使用 HttpSecurity 对象来配置跨域访问。通过调用 cors() 方法,可以启用跨域请求。
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .cors()
                    .and()
                // 其他安全配置
        }
    }
    
    1. 自定义 CorsConfigurationSource
      除了使用默认的 CorsConfigurationSource,还可以自定义 CorsConfigurationSource 对象来配置跨域访问。
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .cors().configurationSource(corsConfigurationSource())
                    .and()
                // 其他安全配置
        }
        
        private CorsConfigurationSource corsConfigurationSource() {
            CorsConfiguration corsConfiguration = new CorsConfiguration();
            corsConfiguration.addAllowedOrigin("http://localhost:8080");
            corsConfiguration.addAllowedMethod("*");
            corsConfiguration.addAllowedHeader("*");
            
            UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
            source.registerCorsConfiguration("/**", corsConfiguration);
            
            return source;
        }
    }
    

    通过以上方式可以配置 Spring 实现跨域访问,根据实际需求选择适合的方式。

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

400-800-1024

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

分享本页
返回顶部