Angular适配Waffle Spring Boot+Spring Security及内嵌Tomcat的问题求助
问题原因
该报错是Waffle的NegotiateSecurityFilter默认拦截了所有请求,浏览器请求静态HTML资源时携带的Negotiate头不符合Waffle预期格式,或是静态资源本身不需要走Windows认证流程被过滤器误拦截导致。
修复适配方案
1. 配置Spring Security放行静态资源
在Spring Security配置类中添加静态资源白名单,跳过Waffle认证流程:
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override public void configure(WebSecurity web) throws Exception { // 按实际静态资源存放路径调整匹配规则 web.ignoring() .antMatchers("/**.html", "/**.js", "/**.css", "/assets/**", "/favicon.ico"); } @Override protected void configure(HttpSecurity http) throws Exception { http.addFilterBefore(negotiateSecurityFilter(), ExceptionTranslationFilter.class) .authorizeRequests() // 业务接口要求认证 .anyRequest().authenticated() .and() // 前后端分离场景可按需关闭csrf校验 .csrf().disable(); } // 原有Waffle相关Bean(NegotiateSecurityFilter、WindowsAuthenticationProvider等)保持官方示例配置即可 }
2. 限制Waffle过滤器拦截范围
手动指定Waffle过滤器仅拦截需要认证的业务接口,避免拦截静态资源:
@Bean public FilterRegistrationBean<NegotiateSecurityFilter> negotiateSecurityFilterRegistration(NegotiateSecurityFilter filter) { FilterRegistrationBean<NegotiateSecurityFilter> registration = new FilterRegistrationBean<>(filter); // 仅拦截需要认证的业务接口路径,比如/api/* registration.addUrlPatterns("/api/*"); registration.setEnabled(false); return registration; }
3. Angular单页应用适配
将Angular打包后的dist目录所有文件放入Spring Boot的resources/static目录下,添加路由适配规则避免页面刷新404:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/{path:[^\\.]*}").setViewName("forward:/index.html"); } }
验证
配置完成后重启项目,访问静态HTML、Angular页面不会再触发Waffle认证,仅请求业务接口时才会走Windows认证流程,不会再出现Invalid Authorization header报错。
内容的提问来源于stack exchange,提问作者mirbachl
相关产品推荐
相关产品推荐

