2016-08-26 4 views
0

私はアプリケーションでspring:bootというjwt認証を使用しています。すべて順調。有効なトークンがヘッダーにある場合、それは検証されており、応答は正常に送信されています。SpringセキュリティのJWT Authendication Filterからのリダイレクト

しかし、無効なリクエストをログインページにリダイレクトする方法とログインが成功した後に、リクエストされた最初のページにリダイレクトする方法。ここで

は私のauthendicationフィルタ

@Override 
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
     ServletException { 
    HttpServletRequest httpRequest = (HttpServletRequest) request; 
    String authToken = httpRequest.getHeader(this.tokenHeader); 
    // authToken.startsWith("Bearer ") 
    // String authToken = header.substring(7); 
    String username = jwtTokenUtil.getUsernameFromToken(authToken); 
    System.out.println("Token is " + authToken); 
    System.out.println("Username is " + username); 
    System.out.println("Audience is from " + jwtTokenUtil.getAudienceFromToken(authToken)); 
    if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { 
     UserDetails userDetails = this.userDetailsService.loadUserByUsername(username); 
     System.out.println(userDetails.getAuthorities()); 
     if (jwtTokenUtil.validateToken(authToken, userDetails)) { 
      UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
        userDetails, null, userDetails.getAuthorities()); 
      authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpRequest)); 
      SecurityContextHolder.getContext().setAuthentication(authentication); 
     } else { 
      System.out.println("Token is invalid "); 
     } 
    } 
    chain.doFilter(request, response); 
} 

}

答えて

0

JWT /ステートレスなセキュリティを使用する目的は、上の任意のクライアントデータを保持しないことです私の設定方法ここで

httpSecurity 
.csrf().disable().exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and() 
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() 
.authorizeRequests() 
.antMatchers(HttpMethod.GET, "/", "/*.html", "/favicon.ico", "/**/*.html", "/**/*.css", "/**/*.js") 
.permitAll().antMatchers("/auth/**").permitAll().anyRequest().authenticated(); 
httpSecurity.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class); 
httpSecurity.headers().cacheControl(); 

されていますそれが適切に機能するためにそのノードに戻る要求を必要とするバックエンドであり、したがって任意の要求が任意のバックエンドインスタンスに行くことを可能にする。これにより、アプリケーションのスケーラビリティが向上するだけでなく、今説明したことをさらに難しくしています。

フロントエンドでユーザー状態が保存されるため、JSやその他のフロントエンド技術でこの動作を実装する必要があります。フレームワークを使用すると、バニラJSよりも高い学習曲線が得られますが、複雑な要件を管理して実装することは、長期的にはずっと簡単になります。

関連する問題