Frühlingssicherheit CORS Filter

Wir fügten hinzuSpring Security zu unserem bestehenden Projekt.

on diesem Moment an bekommen wir eine 401No 'Access-Control-Allow-Origin' header is present on the requested resource Fehler von unserem Server.

Das liegt daran, neinAccess-Control-Allow-Originer @ -Header ist an die Antwort angehängt. Um dies zu beheben, haben wir unseren eigenen Filter hinzugefügt, der sich im @ befindeFilter chain vor dem Abmeldefilter, aber der Filter gilt nicht für unsere Anfragen.

Unser Fehler:

XMLHttpRequest kann nicht geladen werdenhttp://localhost:8080/getKunden. In der angeforderten Ressource ist kein 'Access-Control-Allow-Origin'-Header vorhanden. Ursprunghttp://localhost:3000 ist daher nicht zugänglich. Die Antwort hatte den HTTP-Statuscode 401.

Unsere Sicherheitskonfiguration:

@EnableWebSecurity
@Configuration
@ComponentScan("com.company.praktikant")
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired
private MyFilter filter;

@Override
public void configure(HttpSecurity http) throws Exception {
    final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    final CorsConfiguration config = new CorsConfiguration();

    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");
    config.addAllowedMethod("GET");
    config.addAllowedMethod("PUT");
    config.addAllowedMethod("POST");
    source.registerCorsConfiguration("/**", config);
    http.addFilterBefore(new MyFilter(), LogoutFilter.class).authorizeRequests()
            .antMatchers(HttpMethod.OPTIONS, "/*").permitAll();
}

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
}
}

Unser Filter

@Component
public class MyFilter extends OncePerRequestFilter {

@Override
public void destroy() {

}

private String getAllowedDomainsRegex() {
    return "individual / customized Regex";
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {

    final String origin = "http://localhost:3000";

    response.addHeader("Access-Control-Allow-Origin", origin);
    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
    response.setHeader("Access-Control-Allow-Credentials", "true");
    response.setHeader("Access-Control-Allow-Headers",
            "content-type, x-gwt-module-base, x-gwt-permutation, clientid, longpush");

    filterChain.doFilter(request, response);

}
}

Unsere Bewerbung

@SpringBootApplication
public class Application {
public static void main(String[] args) {
    final ApplicationContext ctx = SpringApplication.run(Application.class, args);
    final AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
    annotationConfigApplicationContext.register(CORSConfig.class);
    annotationConfigApplicationContext.refresh();
}
}

Unser Filter ist ab Spring-Boot registriert:

2016-11-04 09: 19: 51.494 INFO 9704 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean: Zuordnungsfilter: 'myFilter' zu: [/ *]

Unsere generierte Filterkette:

2016-11-04 09: 19: 52.729 INFO 9704 --- [ost-startStop-1] ossweb.DefaultSecurityFilterChain: Filterkette erstellen: org.springframework.security.web.util.matcher.AnyRequestMatcher@1, [org .springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter @ 5d8c5a8a, org.springframework.security.web.context.SecurityContextPersistenceFilter@7d6938f, org.springframework.security.web.header.weader.spring .web.csrf.CsrfFilter @ 4af4df11, com.company.praktikant.MyFilter@5ba65db2, org.springframework.security.web.authentication.logout.LogoutFilter@2330834f, org.springframework.security.web.savedrequest.re32RefestR .springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter @ 4fc0f1a2, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2357120f, org.springframework.security.web.session.Session10ingManagementFilurity .Ausnahme nTranslationFilter @ 4b8bf1fb, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@42063cf1]

Die Antwort:Response headers

Wir haben die Lösung auch aus dem Frühjahr ausprobiert, aber es hat nicht funktioniert! Die Annotation @CrossOrigin in unserem Controller hat auch nicht geholfen.

Edit 1:

Versuchte die Lösung von @Piotr Sołtysiak. Der cors-Filter ist nicht in der generierten Filterkette aufgeführt, und es wird immer noch derselbe Fehler angezeigt.

2016-11-04 10: 22: 49.881 INFO 8820 --- [ost-startStop-1] ossweb.DefaultSecurityFilterChain: Erstellen der Filterkette: org.springframework.security.web.util.matcher.AnyRequestMatcher@1, [org .springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter @ 4c191377, org.springframework.security.web.context.SecurityContextPersistenceFilter@28bad32a, org.springframework.security.web.header .web.csrf.CsrfFilter @ 288460dd, org.springframework.security.web.authentication.logout.LogoutFilter@1c9cd096, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@3990c331.wui .DefaultLoginPageGeneratingFilter @ 1e8d4ac1, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@2d61d2a4, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@380.Request reRequestFilter @ abf2de3, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@2a5c161b, org.springframework.security.web.session.SessionManagementFilter@3c1fd3e5, org.springframework.security.Exception.efa. security.web.access.intercept.FilterSecurityInterceptor@5d27725a]

Übrigens verwenden wir Spring-Security Version 4.1.3.!

Antworten auf die Frage(16)

Ihre Antwort auf die Frage