在我的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"));
}
}
答案 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:
阻止将标头添加到响应中。