2017-06-22 13 views
1

JWTトークンを使用して私の角型アプリケーションの認証を構築しています。 残りのAPIへのリクエストについては、httpリクエストが/ login(新しいトークンを作成する)以外の場合、httpリクエストのヘッダー内のトークンをその春のMVCでチェックします。角度と春のJwt認証

私のcorsフィルタに問題があります。ユーザーが正常にログインした後、401状態を送信しています。 「承認」ヘッダーで送信されたトークンは考慮されません。

angular service

getListe(): Promise<any> { 
     let header = new Headers(); 
     header.append("authorization", localStorage.getItem("token")) 
     return this.http.get(URL_API_REST + 'liste', header) 
      .toPromise() 
      .then(response => response.json()) 
      .catch(this.handleError); 
    } 

Spring Cors Filter

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) res; 
     HttpServletRequest request= (HttpServletRequest) req; 

     response.setHeader("Access-Control-Allow-Origin", "*"); 
     response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT"); 
     response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type"); 
     response.setHeader("Access-Control-Expose-Headers", "x-requested-with"); 

     if(!request.getRequestURI().equals("/rest/rest/login")) { 
      response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization"); 
      response.setStatus(HttpServletResponse.SC_OK); 
     } 

     /*if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { 
      response.setStatus(HttpServletResponse.SC_OK); 
     } else { 
      chain.doFilter(req, res); 
     } 
*/ 
     chain.doFilter(req, res); 
    } 

Spring Authentication Filter

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
     HttpServletResponse response = (HttpServletResponse) servletResponse; 
     HttpServletRequest request= (HttpServletRequest) servletRequest; 

     String token = request.getHeader("token"); 
     if(token != null){ 
      System.out.println("Présence d'un token"); 
     } 
     else{ 
      if(!request.getRequestURI().equals("/rest/rest/login")) 
       response.sendError(HttpServletResponse.SC_UNAUTHORIZED); 
     } 
     filterChain.doFilter(request, response); 
    } 

私が行方不明です何かがありますか?

答えて

0

私はこの問題に対処するのに苦労しましたが、回答が時間の余裕があることを願っています。

実際には、私の角度は、ヘッダーauthorizationをリクエストヘッダーに送信していないことがわかりました。その問題を解決するために、私はRequestOptionsを私のサービスAngularで使っていました。

service Angular

getListe(): Promise<any> { 
     let header = new Headers(); 
     header.append("authorization", localStorage.getItem("token")) 
     let options = new RequestOptions({headers: header}) 
     return this.http.get(URL_API_REST + 'liste', options) 
      .toPromise() 
      .then(response => response.json()) 
      .catch(this.handleError); 
    } 
0

私は今すぐコードを分析する時間がありませんが、私はJWTとJavaを使った簡単なログインシステムを示すGitHubにこのprojectをお勧めします。私はいくつかのシステムでJWTを実装するための例としてこれを使用しましたが、それは完全に機能しました。それが役に立てば幸い。