[JAVA] Spring Framework 5.2.0 - duplication d'en-tête variable en raison de la modification de la gestion CORS

Lors de l'utilisation de Spring Security avec 5.2.0.RELEASE, les en-têtes de réponse Vary suivants peuvent être dupliqués.

Surtout lors de l'exécution du test du contrôleur @ CrossOrigin comme celui-ci, il sera dupliqué.

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(context)
                .apply(SecurityMockMvcConfigurers.springSecurity()).build();
    }

Cible

Spring Framework 5.2.0.RELEASE (spring-web) + Utilisez Spring Security

Cause

Se produit lorsque le paramètre Spring Security CORS et l'annotation @ CrossOrigin sont définis pour le point de terminaison. C'est parce que la méthode handleInternal de DefaultCorsProcessor.java a été modifiée pour ajouter l'en-tête Vary avec la méthode processRequest. Le CORS dans Spring Security et le filtre CORS dans WebMVC semblent être couverts et peuvent être exécutés deux fois.

DefaultCorsProcessor.java


public boolean processRequest(@Nullable CorsConfiguration config, HttpServletRequest request,
        HttpServletResponse response) throws IOException {

    response.addHeader(HttpHeaders.VARY, HttpHeaders.ORIGIN);
    response.addHeader(HttpHeaders.VARY, HttpHeaders.ACCESS_CONTROL_REQUEST_METHOD);
    response.addHeader(HttpHeaders.VARY, HttpHeaders.ACCESS_CONTROL_REQUEST_HEADERS);
    ...

Cliquez ici pour les différences

solution de contournement

Arrêtez le paramètre cors défini comme suit dans la configuration de Spring Security.

SpringSecurityConfig.java


@Override
public void configure(HttpSecurity http) throws Exception {
    http...
        .cors()
            .configurationSource(this.corsConfigurationSource());
}

private CorsConfigurationSource corsConfigurationSource() {
    ...
}

Jusqu'à présent, il était normal d'exécuter CorsFilter deux fois, mais comme l'emplacement de l'ajout d'en-tête a changé, il est devenu dupliqué après avoir exécuté deux fois.

Vous ne devez pas définir CORS pour Spring Security et @ CrossOrigin. .. S'il y a une autre bonne solution. .. .. .. ..

Soit dit en passant, il y a pas mal d'autres changements. 5.2.0 effrayant https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-5.x

Recommended Posts

Spring Framework 5.2.0 - duplication d'en-tête variable en raison de la modification de la gestion CORS
Modifications majeures liées au test Spring Framework 5.0