J'ai créé une page d'intégration avec Spring-boot. Celui à afficher à partir d'autres sites avec iframe. À ce moment, Spring Security a été introduit et l'en-tête HTTP "X-Frame-Options" est devenu DENY par défaut, et la page intégrée n'a pas été affichée.
Cette X-Frame-Options elle-même devrait être DENY afin de supprimer le clic jacking sur les pages ordinaires, j'ai donc décidé qu'il était préférable de ne pas envoyer cet en-tête uniquement sur la page d'intégration. Cependant, "définir les options X-Frame uniquement pour une URL spécifique" était un peu compliqué, alors je l'ai résumé.
Je pense que d'autres en-têtes HTTP peuvent être définis pour chaque URL si nécessaire (non vérifiés).
Cible URL | X-Frame-Options |
---|---|
example.com/contents/embed/** | N'envoyez pas l'en-tête lui-même |
Autre que l'URL ci-dessus | DENY (par défaut) |
Les personnes ayant les mêmes problèmes sont en débordement de pile. Donc, cette fois, j'en ai parlé.
Disable X-FrameOptions response header for a URL Spring Security JAVA config https://stackoverflow.com/questions/42257402/disable-x-frameoptions-response-header-for-a-url-spring-security-java-config
Si vous le définissez avec le même "configure (HttpSecurity http)", toutes les URL seront affectées. Il semble que la clé soit de préparer plusieurs extensions de WebSecurityConfigurerAdapter.
@EnableWebSecurity
public class WebMVCSecurity {
//Définissez les paramètres d'authentification. option. Ceci est juste un échantillon, X-Frame-Cela n'affecte pas les options, vous pouvez donc le modifier.
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("password").roles("USER").and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
//C'est le plus important.
//Créez une instance de WebSecurityConfigurerAdapter.@Définissez l'ordre de lecture avec l'annotation Order.
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
// 「"/contents/embed/**"Spécifiez l'URL que vous souhaitez appliquer.
//Cette fois, je ne voulais définir aucun en-tête, alors ".headers().frameOptions().disable()".
// 「.headers().frameOptions().sameOrigin()Il existe également des paramètres tels que ", veuillez donc le vérifier.
http.antMatcher("/contents/embed/**").headers().frameOptions().disable();
}
}
//Créez une autre instance de WebSecurityConfigurerAdapter.
// 「"/contents/embed/**"Les paramètres ici sont appliqués aux URL qui ne correspondent pas à.
// @Si vous n'ajoutez pas l'annotation Order, d'autres@Il est dit qu'il sera chargé après la commande.
@Configuration
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
//etc. Veuillez définir en fonction du projet.
}
}
}
c'est tout.