Spring Security配置Content-Security-Policy未生效问题求助
问题核心原因及解决方法
CSP作用对象错误
你当前查看的是后端API接口的响应,返回类型为application/json。CSP策略仅对浏览器需要解析渲染的资源生效,包括HTML页面、JS脚本、CSS样式、图片等静态资源,纯数据接口的CSP头会被浏览器直接忽略,不会触发任何校验规则。
如果你的前端应用是独立部署(比如你配置的跨域源http://localhost:4200是前端开发服务),需要在前端服务的响应中添加CSP头;如果是前后端打包在同一个Spring Boot项目中部署,需要给静态资源、页面接口的响应添加CSP头。CSP语法配置错误
你最开始的配置script-src none; style-src none;存在语法错误,CSP的内置关键字(none/self/unsafe-inline/unsafe-eval等)必须用单引号包裹,正确写法为script-src 'none'; style-src 'none';,语法错误的CSP规则会被浏览器直接丢弃。
Spring Security内置了CSP配置方法,不需要手动用StaticHeadersWriter添加,标准配置写法如下:
http.headers() .contentSecurityPolicy("script-src 'self'; style-src 'self';");
- 缓存或插件干扰
测试时建议开启浏览器无痕模式,先清除全部缓存,避免旧的无CSP的页面缓存生效。同时检查是否安装了CSP禁用类的调试插件,这类插件会强制关闭浏览器的CSP校验逻辑,导致规则不生效。
内容的提问来源于stack exchange,提问作者swapnil irabatti
相关产品推荐
相关产品推荐

