Java でクロスオリジンの問題を解決するには、通常、適切な CORS (Cross-Origin Resource Sharing) ヘッダーを設定する必要があります。Spring Framework を使用してクロスドメインの問題を解決する具体的な方法と例を以下に示します。
データ要求を処理するコントローラーを備えた Spring Boot アプリケーションがあるとします。他のドメイン名のページがこのインターフェイスにアクセスできるようにする必要があります。
-
注釈を使用します
@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
インターフェイスにアクセスできます。 -
グローバル 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 リクエストのみを許可します。 -
フィルターまたはインターセプターを使用します。
カスタム フィルターまたはインターセプターを作成して、応答に適切な 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 アプリケーションのクロスドメインの問題を解決できます。プロジェクトに適切な方法の選択は、アプリケーションのアーキテクチャと要件によって異なります。