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();
}
Spring Framework 5.2.0.RELEASE (spring-web) + Utilisez Spring Security
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
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