2016-04-12 28 views
1

Angular2 istemcimi Spring Server'ımla iletişim kurarken sorun yaşıyorum, çünkü buna yaylı güvenlik ekledim, yani sunucu oturum açma URL'sine bir JSON kimlik doğrulama bilgisi göndermeye çalıştığımda '_csrf' veya 'X-CSRF-TOKEN' başlıklarının istek parametresinde 403 "Geçersiz CSRF Jetonu 'null" var.Yanıt yanıtta CSRF belirteci gönderilmiyor Spring

İstemci tarafından kullanılacak yanıtlarımın üstbilgisinde bir belirteç geçirmem gerektiğini anlıyorum, ancak bu simge geçmiyor. this answer'u denedim ancak belirteci hala geçmiyor. Postacıdan da istek gönderiyorum ve jeton da gelmiyor.

webSecurityConfig.xml

:

private CsrfTokenRepository csrfTokenRepository() { 
    HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); 
    repository.setHeaderName("X-XSRF-TOKEN"); 
    return repository; 
} 

X-CSRF-simge yerine X-XSRF-TOKEN olmalıdır:

<http entry-point-ref="restAuthenticationEntryPoint"> 
     <intercept-url pattern="/api/**" access="hasRole('ROLE_USER')"/> 

     <form-login 
     authentication-success-handler-ref="mySuccessHandler" 
     authentication-failure-handler-ref="myFailureHandler" 
     /> 

     <logout /> 
    </http> 

    <beans:bean id="mySuccessHandler" 
     class="com.eficid.cloud.security.rest.AuthenticationSuccessHandler"/> 
    <beans:bean id="myFailureHandler" class= 
    "org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"/> 


     <authentication-manager> 
     <authentication-provider> 
      <user-service> 
      <user name="temp" password="temp" authorities="ROLE_USER" /> 
      </user-service> 
     </authentication-provider> 
     </authentication-manager> 

</beans:beans> 

SpringSecurityConfiguration

@Configuration 
@ImportResource({ "classpath:webSecurityConfig.xml" }) 
@ComponentScan("com.eficid.cloud.security.rest") 
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { 

    public SpringSecurityConfig() { 
     super(); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.httpBasic().and().authorizeRequests() 
       .antMatchers("/spring-security-rest/login").permitAll().anyRequest() 
       .authenticated().and().csrf() 
       .csrfTokenRepository(csrfTokenRepository()).and() 
       .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class); 
    } 


    private Filter csrfHeaderFilter() { 
     return new OncePerRequestFilter() { 
      @Override 
      protected void doFilterInternal(HttpServletRequest request, 
        HttpServletResponse response, FilterChain filterChain) 
        throws ServletException, IOException { 
       CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class 
         .getName()); 
       if (csrf != null) { 
        Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN"); 
        String token = csrf.getToken(); 
        if (cookie == null || token != null 
          && !token.equals(cookie.getValue())) { 
         cookie = new Cookie("XSRF-TOKEN", token); 
         cookie.setPath("/"); 
         response.addCookie(cookie); 
        } 
       } 
       filterChain.doFilter(request, response); 
      } 
     }; 
    } 

    private CsrfTokenRepository csrfTokenRepository() { 
     HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository(); 
     repository.setHeaderName("X-XSRF-TOKEN"); 
     return repository; 
    } 

} 

cevap

İlgili konular