Javaでクロスドメインの問題を解決するために使用される方法は何ですか

Java でクロスオリジンの問題を解決するには、通常、適切な CORS (Cross-Origin Resource Sharing) ヘッダーを設定する必要があります。Spring Framework を使用してクロスドメインの問題を解決する具体的な方法と例を以下に示します。

データ要求を処理するコントローラーを備えた Spring Boot アプリケーションがあるとします。他のドメイン名のページがこのインターフェイスにアクセスできるようにする必要があります。

  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
    public class DataController {
          
          
        @CrossOrigin(origins = "http://example.com")
        @GetMapping("/data")
        public String getData() {
          
          
            return "This is some data from the server.";
        }
    }
    

    上の例では、http://example.comドメインのページのみが/dataインターフェイスにアクセスできます。

  2. グローバル CORS 構成を使用します。

    アプリケーションの構成で CORS をグローバルに構成して、すべてまたは特定のドメインに対するクロスオリジン要求を許可することもできます。次のように構成クラスを作成し、CorsRegistryオブジェクトを構成します。

    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.CorsRegistry;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    @Configuration
    @EnableWebMvc
    public class CorsConfig implements WebMvcConfigurer {
          
          
        @Override
        public void addCorsMappings(CorsRegistry registry) {
          
          
            registry.addMapping("/data")
                    .allowedOrigins("http://example.com")
                    .allowedMethods("GET"); // 允许的请求方法
        }
    }
    

    上記の例では、http://example.comドメインのページが/dataインターフェイスにアクセスできるようにし、GET リクエストのみを許可します。

  3. フィルターまたはインターセプターを使用します。

    カスタム フィルターまたはインターセプターを作成して、応答に適切な CORS ヘッダーを設定できます。こうすることで、アプリケーション内の複数の場所で同じクロスオリジン セットアップ ロジックを再利用できます。

    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    @WebFilter("/*")
    public class CorsFilter implements Filter {
          
          
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
          
          
            response.setHeader("Access-Control-Allow-Origin", "http://example.com");
            response.setHeader("Access-Control-Allow-Methods", "GET");
            chain.doFilter(request, response);
        }
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
          
          
        }
    
        @Override
        public void destroy() {
          
          
        }
    }
    

上記の方法を使用すると、Java Spring Boot アプリケーションのクロスドメインの問題を解決できます。プロジェクトに適切な方法の選択は、アプリケーションのアーキテクチャと要件によって異なります。

おすすめ

転載: blog.csdn.net/weixin_42279822/article/details/132344349