クロスドメインCORSを解決するためにzuul +のセキュリティの問題
簡単な紹介
シーン
サービスの背景には、クロスドメインのCORSの問題に表示されますが、春の大部分は、フレームワーク+フレームワークに基づいて、より便利に解決、問題は競合が、ソースコードの動作原理を理解していない、特に明白である、解決することが無力でした。
Zuulここにあるクロスドメインの設定は、クロスドメインの問題はまだフロントエンドの呼び出しで表示されています。
一般的にクロスドメインの問題によりするインターフェイスCORS設定を追加する権限がありません。しかし、呼び出し元の関数は、サービス間の権限を有している、不可解なクロスドメインの問題を報告しました。
特別なリクエストを投稿
問題が解決で見つかったpost
ビットの特別な要求を、また、それを処理することが必要です。
シンプルかつ複雑なリクエストのリクエストにポストを要求。
でCORS
使用することができるOPTIONS
事前スクリーニングのための要求を開始する方法を、実際の要求がサーバーによって受け入れられるかどうかを検出します。でプリフライトリクエストパケットAccess-Control-Request-Method
サーバー実際に要求ヘッダフィールドは、通知するために使用されHTTP
、この方法をAccess-Control-Request-Headers
実際に実施し、サーバーのカスタムリクエストヘッダフィールドを知らせるために、ヘッダフィールド。サーバプリフライトリクエストから得られる情報に基づいて、次の要求が実用受け入れるかどうかを判断します。
そして、OPTIONS
権利関連コンテンツを携帯していない、インターセプトに認定され、我々はを手放すしなければならないOPTIONS
要求のタイプ
利用機能
クロス解きます
あなたが設定する前に、オーバーコピーする前に、コードを動作させるために使用され、最初の操作は非常に簡単に作成されているCorsFilter
次のコードに基づいて構成されたいくつかの情報が注入されたので、豆、しかし確かに単純な要求ではなく、特権インタフェースを持っていましたFilterRegistrationBean
豆ローディングシーケンス順序も提供されます。
まだ前と同じ決意の効果の後に役に立つん。
/**
* 跨域配置 C - Cross O - Origin R - Resource S - Sharing
*
* @author purgeyao
* @since 1.0
*/
@Configuration
//@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Arrays.asList("*"));
config.setAllowedHeaders(Arrays.asList("*"));
config.setAllowedMethods(Arrays.asList("*"));
config.setMaxAge(300L);
source.registerCorsConfiguration("/**", config);
CorsFilter corsFilter = new CorsFilter(source);
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(corsFilter);
filterRegistrationBean.setOrder(0);
return filterRegistrationBean;
}
}
+情報源のいくつかの助けを借りて、以下のコードを試してみてください。
実現にCorsFilter
クラスがロードされた@Order
の順序(Ordered.HIGHEST_PRECEDENCE)
最高の優先順位を。
/**
* 解决 zuul+oauth2 跨域配置 C - Cross O - Origin R - Resource S - Sharing
*
* @author purgeyao
* @since 1.0
*/
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class AjaxCorsFilter extends CorsFilter {
public AjaxCorsFilter() {
super(configurationSource());
}
private static UrlBasedCorsConfigurationSource configurationSource() {
CorsConfiguration corsConfig = new CorsConfiguration();
// List<String> allowedHeaders = Arrays.asList("x-auth-token", "content-type", "X-Requested-With", "XMLHttpRequest");
List<String> exposedHeaders = Arrays
.asList("x-auth-token", "content-type", "X-Requested-With", "XMLHttpRequest");
// List<String> allowedMethods = Arrays.asList("POST", "GET", "DELETE", "PUT", "OPTIONS");
List<String> allowedHeaders = Arrays.asList("*");
List<String> allowedMethods = Arrays.asList("*");
List<String> allowedOrigins = Arrays.asList("*");
corsConfig.setAllowedHeaders(allowedHeaders);
corsConfig.setAllowedMethods(allowedMethods);
corsConfig.setAllowedOrigins(allowedOrigins);
corsConfig.setExposedHeaders(exposedHeaders);
corsConfig.setMaxAge(36000L);
corsConfig.setAllowCredentials(true);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfig);
return source;
}
}
ハッハッハ、私は解決、何とか理解のうえ、ああ感じませんでした
実際には、ちょうど私たちは上記注入し、ロードされた質問の順番を発見したFilterRegistrationBean
にも使用することができますが、あなたは少し問題以上に設定する必要があり、時間を設定するためにはsecurity
、優先度の高い、代わりにOrdered.HIGHEST_PRECEDENCE
クロスドメインで見つかった成功を。
/**
* 跨域配置 C - Cross O - Origin R - Resource S - Sharing
*
* @author purgeyao
* @since 1.0
*/
@Configuration
//@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsConfig {
@Bean
public FilterRegistrationBean filterRegistrationBean() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Arrays.asList("*"));
config.setAllowedHeaders(Arrays.asList("*"));
config.setAllowedMethods(Arrays.asList("*"));
config.setMaxAge(300L);
source.registerCorsConfiguration("/**", config);
CorsFilter corsFilter = new CorsFilter(source);
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(corsFilter);
// 设置为 Ordered.HIGHEST_PRECEDENCE
filterRegistrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return filterRegistrationBean;
}
}
解決するには解決しました。。。
OPTIONSは解決するように要求します
ポスト要求を送信すると、実際に送信する前に存在しますでしょうOPTIONS
リクエストを。
のでOPTIONS
任意の認証情報のステートフルを運ぶために、許可が異常傍受された、それは後に実際の要求ではありません。
今、私たちはちょうどに必要なOPTIONS
200個の状態をすることができ、要求のリリースに戻ります。
それを行うには、多くの方法がまたできる、あなたはzuulゲートウェイに手放すことができ、ありsecurity
インターセプトにリスト追加を無視します。
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
...
@Override
protected void configure(HttpSecurity http) throws Exception {
...
// 添加忽略拦截OPTIONS 类型的请求
http.authorizeRequests().antMatchers(HttpMethod.OPTIONS).permitAll();
...
}
}
すべてがすべての権利です。
概要
簡単なポイントを解決するために、単純なバグが、バグ、無力感、不可解な問題が発生した交差点には、患者の観察光源の原理を実行する必要があります。
サンプルコード住所:Zuul-セキュリティ
GitHubの上:
Purgeyaoは注意を歓迎します
QQ交換基:
812321371
マイクロチャネル交換基:MercyYao
マイクロチャンネル公共数: