[JAVA] Spring Framework 5.2.0 - Unterschiedliche Header-Duplizierung aufgrund einer Änderung der CORS-Behandlung

Bei Verwendung von Spring Security mit 5.2.0.RELEASE können die folgenden unterschiedlichen Antwortheader dupliziert werden.

Insbesondere wenn der Test von @ CrossOrigin Controller wie folgt ausgeführt wird, wird er dupliziert.

    @Autowired
    private WebApplicationContext context;

    private MockMvc mockMvc;

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

Ziel

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

Ursache

Tritt auf, wenn sowohl die Spring Security CORS-Einstellung als auch die Annotation "@ CrossOrigin" für den Endpunkt festgelegt sind. Dies liegt daran, dass die Methode "handleInternal" von "DefaultCorsProcessor.java" geändert wurde, um den Vary-Header mit der Methode "processRequest" hinzuzufügen. Das CORS in Spring Security und der CORS-Filter in WebMVC scheinen abgedeckt zu sein und können zweimal ausgeführt werden.

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);
    ...

Klicken Sie hier für Unterschiede

Problemumgehung

Stoppen Sie die Cors-Einstellung, die in der Spring Security-Konfiguration wie folgt eingestellt ist.

SpringSecurityConfig.java


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

private CorsConfigurationSource corsConfigurationSource() {
    ...
}

Bisher war es in Ordnung, CorsFilter zweimal auszuführen. Da sich jedoch die Position des Header-Zusatzes geändert hat, wurde es nach zweimaliger Ausführung dupliziert.

Sie sollten CORS nicht für Spring Security und @ CrossOrigin einstellen. .. Wenn es eine andere gute Lösung gibt. .. .. .. ..

Übrigens gibt es noch einige andere Änderungen. 5.2.0 beängstigend https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-5.x

Recommended Posts

Spring Framework 5.2.0 - Unterschiedliche Header-Duplizierung aufgrund einer Änderung der CORS-Behandlung
Wichtige Änderungen im Zusammenhang mit Spring Framework 5.0 Test