2017-11-30 5 views
1

私は春にバックエンドのREST APIを構築しています。私の友人はAPIを呼び出すためにAngular JSフロントエンドアプリケーションを構築しています。私はキーAuthorizationを持つトークンヘッダーと、それ以外の場合はサービスにアクセスできる値を持っています。私はAPIを受け取ることができますが、テストされると、彼はpreflight.Belowの401 Unauthorized Errorを取得すると私のdoFilterInternalメソッドです。CORSへの応答ヘッダーの指定方法は?

protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { 
     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers","Content-Type, Accept, X-Requested-With, Authorization"); 
} 

しかし、彼は彼が

は、だから私はこの答え hereに続き、私は財産application.propertiesで

spring.mvc.dispatch-options-request=true

を追加取得する角度JSでトークンを持つAPIを呼び出すときしかし、まだ彼はエラーのように思われる

プリフライトの応答無効なhttpsステータスコード401

ご迷惑をおかけして申し訳ございません。これはあなたを助けることができる

答えて

2

 @Override 
     protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws ServletException, IOException { 
      LOG.info("Adding CORS Headers ........................");   
      res.setHeader("Access-Control-Allow-Origin", "*"); 
      res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); 
      res.setHeader("Access-Control-Max-Age", "3600"); 
      res.setHeader("Access-Control-Allow-Headers", "X-PINGOTHER,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization"); 
      res.addHeader("Access-Control-Expose-Headers", "xsrf-token"); 
      if ("OPTIONS".equals(req.getMethod())) { 
      res.setStatus(HttpServletResponse.SC_OK); 
      } else { 
      chain.doFilter(req, res); 
      }   
     } 

プリフライトエラーを回避するフィルターがポストからCross Origin Request Blocked Spring MVC Restful Angularjs

+0

これは 'Requestヘッダーフィールドと異なるエラーをスローするようになりました。プリフライトレスポンスでAccess-Control-Allow-Headersがアクセス制御許可ヘッダーによって許可されていません。 ' – joker21

+0

このエラーのようなものはhttps://stackoverflow.com/questions/です。 34862579/request-header-field-access-control-allow-origin-by-access-by-contro?rq = 1 –

0

を設定するには、貴様の方法を持っています。

このプロジェクトには、便利なセキュリティ設定がいくつか含まれています。

残念ながら、それはすぐにに2つの方法でCORSを設定するが、ここではないんあなたの問題を解決:

私の知っている最も簡単な方法は、目のオプションは設定することです@CrossOrigin("*")

RestControllerに注釈を付けることです春のセキュリティとCORS:

@Configuration 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure (HttpSecurity http) throws Exception { 
     http.cors(); 
    } 

    @Bean 
    CorsConfigurationSource corsConfigurationSource() { 

     UrlBasedCorsConfigurationSource source; 
     source = new UrlBasedCorsConfigurationSource(); 

     CorsConfiguration configuration = new CorsConfiguration(); 
     List<String> all = Collections.singletonList("*"); 
     configuration.setAllowedOrigins(all); 
     configuration.setAllowedMethods(all); 
     configuration.setAllowedHeaders(all); 

     source.registerCorsConfiguration("/**", configuration); 
     return source; 

    } 

} 

免責事項

両方のアプローチがすべてを可能にすることは明らかです。それは開発中は問題ありませんが、実動コードで使用するとひどい考えです!ここで

+0

を、それを発見し、どのような生産モードで解決する必要がありますか? – milosdju

関連する問題