2017-12-05 45 views
0

こんにちは!私はSpring Bootの初心者です。私は、Rest Controllerを使用するシンプルなJava Spring Boot Applicationを持っています。コントローラのエンドポイントの中には、CORS要求にさらされているものがあります。私はメソッドの上に@CrossOrigin(origins = "..")注釈を追加することによってCORSリクエストを許可することが可能であることを発見しました。 私の問題は、現時点ですべての起源がわからず、後でSpringブートアプリケーションの実行時にそれらのいくつかを追加する必要があるということです。 Rest Rest Controllerのいくつかのエンドポイントに新しい原点アドレスを手動で追加する方法はありますか?例えば。残りのエンドポイントに特定のユーザー(たとえば、管理者)が新しいcors-originを追加できるようにするRest End Controllerにエンドポイントを設定するはいの場合:簡単な例を挙げてください。 実行時にRest ControllerにCORSマッピングを動的に追加する

+0

は、あなたがこの横断的関心事を外部化するためにフィルタを使用して考えたことはありますか?フィルターを使用してください –

答えて

0

これは独自のorg.springframework.web.cors.CorsProcessorを実装することで可能と思います。 org.springframework.web.filter.CorsFilterの実装をご覧ください。これはCorsProcessorというカスタムで設定することができ、方法はpublic void setCorsProcessor(CorsProcessor processor)です。

私はあなた自身のCorsProcessorを実装し、カスタムルールprocessRequestを処理することを提案します。

また、別のオプションとして、Spring Security Configに自分のCorsConfigurationSourceを設定することもできます。例えば @Override protected void configure(HttpSecurity http) throws Exception { http.cors().configurationSource(new CustomConfigSource()); }

CorsConfigurationSourceには、特定のCORS処理を処理できる方法CorsConfiguration getCorsConfiguration(HttpServletRequest request);があります。

+0

答えをありがとう。残念ながら私は少し混乱しています。どこで自分のCorsProcessorを置くべきですか?getCorsConfiguration(HttpServletRequest req)メソッドをどのように呼び出す必要がありますか?私はRest ControllerのどこにでもHttpServletRequest型のパラメータを持っていません。 ...ご覧のとおり、私は本当の初心者です – McRaven

+0

私が提供する2番目のオプションを取ることをお勧めします。あなたのSpring Security Configのあなたのcors設定に独自の 'ConfigurationSource'を追加してください。フレームワークは各リクエストに対してメソッド 'getCorsConfiguration(HttpServletRequest request);を呼び出します。 – mrkernelpanic

0
@Override 
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { 
    response.addHeader("Access-Control-Allow-Origin", "*"); 

    if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) { 
     LOG.trace("Sending Header...."); 
     // CORS "pre-flight" request 
     response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); 

     response.addHeader("Access-Control-Allow-Headers", "Content-Type"); 
     response.addHeader("Access-Control-Max-Age", "1"); 
    } 

    filterChain.doFilter(request, response); 
} 

cros_filter

+0

このリンクは質問に答えるかもしれませんが、ここで答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューの投稿](/レビュー/低品質の投稿/ 18160032) – Kenster

関連する問題