Springboot 设置X-Frame-Options

今天在由于需要将一个由服务端渲染的页面放入到Iframe中,本身这并不是什么难事,但是缺遇到了一个错误,浏览器报错:
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'.
从mdn网站查询了相关错误的原因发现和http header设置相关,相关http header为:X-Frame-Options,mdn网站对这个头的说明如下:
DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。
换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

奇怪的是在springboot和springmvc中并么有设置这个头,而且在web server那里也没有做任何操作。仔细回忆项目和在框架中使用了Springboot相关,因此需要disble这个设置,让这个头不发送,下面是具体方法。

import org.springframework.beans.factory.annotation.Value;
import     org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
@PropertySource({"classpath:application.properties"})
public class WebSecurityConfig extends     WebSecurityConfigurerAdapter {
@Value("${spring.ignoredSecurity}")
private  Boolean ignoredSecurity;
// 设置 HTTP 验证规则
@Override
protected void configure(HttpSecurity http) throws Exception {
    http.headers().frameOptions().disable();
}

Lokie博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论
  • 本博客使用免费开源的 laravel-bjyblog v5.5.1.1 搭建 © 2014-2018 lokie.wang 版权所有 ICP证:沪ICP备18016993号
  • 联系邮箱:kitche1985@hotmail.com