Web返回响应 X-Frame-Options 设置

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

目录

一、问题

二、方案

三、代码  

四、总结


一、问题

   在Springboot做系统的页面嵌入的时候,报错如下:

Refused to display 'http://xxx.com/#/aa/bb' in a frame because it set 'X-Frame-Options' to 'sameorigin'.

出现这个报错的原因是因为:要添加 X-frame-options 响应头设置

二、方案

  要添加 X-frame-options ,赋值的方法有如下三种:

(1)DENY:不能被嵌入到任何iframe或frame中。

(2)SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。

(3)ALLOW-FROM uri:只能被嵌入到指定域名的框架中。

防止某些重要网页被其他网站框架导入,可以给页面增加X-Frame-Options响应头,这样浏览器会依据X-Frame-Options的值来控制iframe框架的页面是否允许加载显示出来,IE下的效果如下(此内容无法再框架中显示。为了帮助保护在此网站中输入的信息安全,此内容的发行者不允许在框架中显示该信息),其他非IE核心浏览器会显示空白内容。

三、代码  

那么在 springboot 项目中,该如何设置那访问的方法呐 ?具体做法如下:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
       //设置X-Frame-Options 响应头,可以嵌套ifram中去.
       http.headers()
             .frameOptions()
             .disable();

      /* 以SAMEORIGIN 方式嵌入,其他两种类似如此
       http.headers()
             .frameOptions()
             .sameOrigin()
             .httpStrictTransportSecurity()
             .disable();
       */
    }
}

在 SpringMVC 中,可以实现如下:

 class FrameTao implements Filter {  
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {  
        HttpServletRequest request = (HttpServletRequest) req;    
        HttpServletResponse response = (HttpServletResponse) res;    
        response.setHeader("x-frame-options", "SAMEORIGIN");    
        chain.doFilter(request, response);  
    }       
}  

四、总结

目前用到的解决办法:

  1、配置apache

(如果是在本地的话,就是在httpd.conf里面配置;如果是linux(ubuntu的话)就是在apache2.conf里面),找个空的位置加入这行代码,具体看你是选择哪种

<span style="font-size:14px;">Header always append X-Frame-Options SAMEORIGIN</span>  

有可能会遇到一种情况,就是我在服务端配置完apache之后,尝试 Restart Apache 但是报了一个错误:

Invalid command ‘Header’, perhaps misspelled or defined by a module not included in the server configuration

  header的方法模块没有安装,我们需要先自行安装一下:

  先输入 a2enmod heade ,然后需要重启一下Apache,输入service apache2 restart

2、配置Nginx:

  配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 'http', 'server' 或者 'location' 的配置中:

<span style="font-size:14px;">add_header X-Frame-Options SAMEORIGIN;</span>


3、在服务端设置的方式如下:

  Java代码:
  response.addHeader("x-frame-options","SAMEORIGIN");

 其他解决方案,可以google查看!

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值