Ich habe eine Einbettungsseite mit Spring-Boot erstellt. Diejenige, die von anderen Sites mit iframe angezeigt wird. Zu diesem Zeitpunkt wurde Spring Security eingeführt und der HTTP-Header "X-Frame-Options" wurde standardmäßig VERWEIGERT, und die eingebettete Seite wurde nicht angezeigt.
Diese X-Frame-Optionen selbst sollten VERWEIGERT sein, um das Klick-Jacking auf normalen Seiten zu unterdrücken. Daher habe ich beschlossen, dass es besser ist, diesen Header nicht nur auf der Einbettungsseite zu senden. Das "Festlegen von X-Frame-Optionen nur für eine bestimmte URL" war jedoch etwas kompliziert, daher habe ich es zusammengefasst.
Ich denke, dass bei Bedarf andere HTTP-Header für jede URL festgelegt werden können (nicht überprüft).
Ziel-URL | X-Frame-Options |
---|---|
example.com/contents/embed/** | Senden Sie den Header nicht selbst |
Andere als die obige URL | VERWEIGERN (Standard) |
Personen mit denselben Problemen befinden sich im Stapelüberlauf. Also habe ich mich diesmal darauf bezogen.
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
Wenn Sie dieselbe Einstellung "configure (HttpSecurity http)" festlegen, sind alle URLs betroffen. Es scheint, dass der Schlüssel darin besteht, mehrere erweiterte WebSecurityConfigurerAdapters vorzubereiten.
@EnableWebSecurity
public class WebMVCSecurity {
//Nehmen Sie Einstellungen für die Authentifizierung vor. Möglichkeit. Dies ist nur ein Beispiel, X.-Frame-Es hat keine Auswirkungen auf Optionen, sodass Sie es ändern können.
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("password").roles("USER").and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
//Das ist das Wichtigste.
//Erstellen Sie eine Instanz von WebSecurityConfigurerAdapter.@Stellen Sie die Lesereihenfolge mit der Auftragsanmerkung ein.
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
// 「"/contents/embed/**"Geben Sie die URL an, die Sie anwenden möchten.
//Dieses Mal wollte ich keinen Header setzen, also ".headers().frameOptions().disable()".
// 「.headers().frameOptions().sameOrigin()Es gibt auch Einstellungen wie ", also probieren Sie es bitte aus.
http.antMatcher("/contents/embed/**").headers().frameOptions().disable();
}
}
//Erstellen Sie eine weitere Instanz von WebSecurityConfigurerAdapter.
// 「"/contents/embed/**"Die Einstellungen hier werden auf URLs angewendet, die nicht entsprechen.
// @Wenn Sie die Bestellanmerkung nicht hinzufügen, andere@Es wird gesagt, dass es nach der Bestellung geladen wird.
@Configuration
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
//etc. Bitte je nach Projekt einstellen.
}
}
}
das ist alles.