Devtool拒绝在一个框架中显示“My uri”,因为它将'X-Frame-Options'设置为'DENY'

时间:2017-02-02 11:23:15

标签: java spring spring-security

在我的Java Spring MVC Web应用程序中,我使用Hibernate,H2和JPA来存储数据。我正在尝试使用devtool可视化数据库中的数据。我还使用Spring Security来保护我的应用。

很遗憾,我无法加载应该显示我的数据库记录的页面 http://localhost:8080/h2-console/login.do?jsessionid=bcdfd8af18f9fa24d1874314750585bd

它在 Chrome 中抱怨:

Refused to display 'http://localhost:8080/h2-console/query.jsp?jsessionid=bcdfd8af18f9fa24d1874314750585bd' in a frame because it set 'X-Frame-Options' to 'DENY'. 

并在 Firefox 中抱怨:

Load denied by X-Frame-Options: http://localhost:8080/h2-console/query.jsp?jsessionid=bcdfd8af18f9fa24d1874314750585bd does not permit framing.

我的Spring Security配置是:

@Configuration
static class WebFormsSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable();
        http
            .authorizeRequests()
                .antMatchers("/h2-console/**").permitAll();
        http
            .authorizeRequests()
                .antMatchers("/welcome").permitAll()
                .antMatchers("/account/**").hasRole("ADMIN")
                .antMatchers("/account/**").authenticated()
                .and()
            .formLogin()
                .loginPage("/login").permitAll()
                .defaultSuccessUrl("/welcome")
                .and()
            .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"));    
    }
}

1 个答案:

答案 0 :(得分:0)

默认情况下,Spring Security禁用iframe中的呈现,请参阅Spring Security Reference

  

20.1.5 X-Frame-Options

     

[...]

     

解决点击劫持问题的一种更现代的方法是使用X-Frame-Options标题:

     
X-Frame-Options: DENY
     

X-Frame-Options响应标头指示浏览器阻止响应中具有此标头的任何站点在帧中呈现。默认情况下,Spring Security会禁用iframe中的呈现。

但您可以更改默认设置,请参阅Spring Security Reference

  

同样,您可以使用以下选项自定义框架选项以在Java配置中使用相同的原点:

     
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
      http
      // ...
          .headers()
              .frameOptions()
                  .sameOrigin();
    }
}

如果您想使用其他来源的相框,可以停用X-Frame-Options HTTP标头,请参阅FrameOptionsConfig#disable

  

阻止将标头添加到响应中。