我有一个特定的应用程序URL-https://baseurl/contextroot。它是一个打包在Spring Boot应用程序中的Angular5应用程序。我想为除https://baseurl/contextroot/path1之外的所有URL启用spring security。
我的应用程序没有用户登录。
我根据搜索论坛的结果尝试了以下类似操作。下面的代码甚至没有加载我的应用程序https://baseurl/contextroot,它返回403。
错误:(类型=禁止,状态= 403)。在请求参数'_csrf'或标头'X-XSRF-TOKEN'上发现无效的CSRF令牌'null'。
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// Build the request matcher for CSFR protection
RequestMatcher csrfRequestMatcher = new RequestMatcher() {
// Disable CSFR protection on the following urls:
private AntPathRequestMatcher[] requestMatchers = { new AntPathRequestMatcher("/**/path1")
};
@Override
public boolean matches(HttpServletRequest request) {
// If the request match one url the CSFR protection will be disabled
for (AntPathRequestMatcher rm : requestMatchers) {
if (rm.matches(request)) {
return false;
}
}
return true;
} // method matches
}; // new RequestMatcher
http.headers().frameOptions().disable();
http.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
// Disable the csrf protection on some request matches
.csrf()
.requireCsrfProtectionMatcher(csrfRequestMatcher);
return;
} // method configure
}
而且我的应用程序将是一个子应用程序,加载到iframe中,并且我只想允许某些URL加载到我的应用程序中,我找到了添加标头编写器的选项,但无法获得类似下面的内容。
http.headers().frameOptions().disable();
http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(
new WhiteListedAllowFromStrategy(Arrays.asList("allowed-website-1","allowed-website-2"))));