Как отключить заголовок ответа "X-Frame-Options" в Spring Безопасность?
У меня есть CKeditor на моем jsp и всякий раз, когда я что-то загружаю, появляется следующая ошибка:
Refused to display 'http://localhost:8080/xxx/xxx/upload-image?CKEditor=text&CKEditorFuncNum=1&langCode=ru' in a frame because it set 'X-Frame-Options' to 'DENY'.
Я попытался удалить Spring Security, и все работает как шарм. Как я могу отключить это в Spring файле xml безопасности? Что мне следует писать между тегами <http>
Ответы
Ответ 1
По умолчанию для параметра X-Frame-Options
установлено значение denied, чтобы предотвратить атаки clickjacking. Чтобы переопределить это, вы можете добавить следующее в конфигурацию безопасности spring
<http>
<headers>
<frame-options policy="SAMEORIGIN"/>
</headers>
</http>
Ниже приведены доступные параметры политики
- DENY - значение по умолчанию. При этом страница не может отображаться в кадре, независимо от того, какой сайт пытается это сделать.
- SAMEORIGIN. Я предполагаю, что это то, что вы ищете, чтобы страница была (и может быть) отображаться в кадре того же происхождения, что и сама страница
- ALLOW-FROM. Позволяет указать источник, в котором страница может отображаться в кадре.
Для получения дополнительной информации смотрите здесь.
И здесь, чтобы проверить, как вы можете настроить заголовки, используя конфигурацию XML или Java.
Обратите внимание, что вам может потребоваться также указать соответствующий strategy
, исходя из потребностей.
Ответ 2
Если вы используете конфиги Java вместо конфигов XML, поместите это в свой метод WebSecurityConfigurerAdapter.configure(HttpSecurity http)
:
http.headers().frameOptions().disable();
Ответ 3
Скорее всего, вы не хотите деактивировать этот заголовок полностью, но используйте SAMEORIGIN
. Если вы используете Java Configs (Spring Boot
) и хотите разрешить X-Frame-Options: SAMEORIGIN
, вам нужно будет использовать следующее.
Для более старых Spring версий безопасности:
http
.headers()
.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
Для более новых версий, таких как Spring Безопасность 4.0.2:
http
.headers()
.frameOptions()
.sameOrigin();
Ответ 4
При использовании конфигурации XML вы можете использовать
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security">
<security:http>
<security:headers>
<security:frame-options disabled="true"></security:frame-options>
</security:headers>
</security:http>
</beans>
Ответ 5
Если вы используете Spring Boot, самый простой способ отключить заголовки Spring Security по умолчанию - использовать свойства security.headers.*
. В частности, если вы хотите отключить заголовок по умолчанию X-Frame-Options
, просто добавьте следующее в application.properties
:
security.headers.frame=false
Также вы можете использовать свойства security.headers.cache
, security.headers.content-type
, security.headers.hsts
и security.headers.xss
. Для получения дополнительной информации ознакомьтесь с SecurityProperties
.
Ответ 6
Если вы используете Spring конфигурацию безопасности Java, по умолчанию все заголовки безопасности по умолчанию добавляются. Они могут быть отключены с использованием конфигурации Java ниже:
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.headers().disable()
...;
}
}