css 文件未加载,因为在使用 spring security5 时启用了严格的 MIME 检查
css files are not loaded because strict MIME checking is enabled when using spring security5
当内容类型选项为“nosniff”时,Spring 安全 5 会阻止我的 css 文件。 spring 安全性不会阻止来自其他站点的外部 css 文件或由 struts2 等框架带来的 css 文件,但它会阻止我创建的 css 文件甚至如果文件像这样是空的:
<link type="text/css" rel="stylesheet" href="reclamation/css/style2.css"/>
错误信息是:
拒绝应用 {fileName} 的样式,因为它的 MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型,并且启用了严格的 MIME 检查。
我验证了 css 文件没有错误,但仍然遇到问题。
这是 headers:
Request URL:
http://localhost:8080/reclamation/reclamation/js/style2.css Referrer
Policy: no-referrer-when-downgrade Cache-Control: no-cache, no-store,
max-age=0, must-revalidate Content-Language: en Content-Length: 1123
Content-Type: text/html;charset=utf-8 Date: Tue, 21 Jul 2020 10:45:08
GMT Expires: 0 Pragma: no-cache X-Content-Type-Options: nosniff
X-Frame-Options: DENY X-XSS-Protection: 1; mode=block Accept:
text/css,/;q=0.1 Accept-Encoding: gzip, deflate, br Accept-Language:
en-US,en;q=0.9,fr;q=0.8,ar;q=0.7 Cache-Control: no-cache Connection:
keep-alive Cookie: JSESSIONID=EA9A3D0AC31CDB51C68E0806CD5C32E1 DNT: 1
Host: localhost:8080 Pragma: no-cache Referer:
http://localhost:8080/reclamation/list-complaint.action
Sec-Fetch-Dest: style Sec-Fetch-Mode: no-cors Sec-Fetch-Site:
same-origin User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5
Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/84.0.4147.89 Mobile Safari/537.36
permitAll 不是解决方案,因为它允许访问但保留安全过滤器
<http pattern="/css/**" security="none"/>
有效,但它会删除 X-Content-Type-Options: css 文件的 nosniff。顺便说一句,security="none" 解决了使用 eclipse 时的问题,但是当我直接在 tomcat9 中部署 war 时,它会被忽略并且 css 文件不会加载.
我的配置:struts2,jdk8 tomcat 9.0.19,spring security 5.1.6.RELEASE
我找到了解决方案,我的过滤器正在将所有文件更改为“text/html”
public class CharacterSetFilter implements Filter {
public void destroy() {}
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain next) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");//this line was the problem
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
// ...
}
Spring 安全 5 会阻止我的 css 文件。 spring 安全性不会阻止来自其他站点的外部 css 文件或由 struts2 等框架带来的 css 文件,但它会阻止我创建的 css 文件甚至如果文件像这样是空的:
<link type="text/css" rel="stylesheet" href="reclamation/css/style2.css"/>
错误信息是:
拒绝应用 {fileName} 的样式,因为它的 MIME 类型 ('text/html') 不是受支持的样式表 MIME 类型,并且启用了严格的 MIME 检查。
我验证了 css 文件没有错误,但仍然遇到问题。
这是 headers:
Request URL: http://localhost:8080/reclamation/reclamation/js/style2.css Referrer Policy: no-referrer-when-downgrade Cache-Control: no-cache, no-store, max-age=0, must-revalidate Content-Language: en Content-Length: 1123 Content-Type: text/html;charset=utf-8 Date: Tue, 21 Jul 2020 10:45:08 GMT Expires: 0 Pragma: no-cache X-Content-Type-Options: nosniff X-Frame-Options: DENY X-XSS-Protection: 1; mode=block Accept: text/css,/;q=0.1 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.9,fr;q=0.8,ar;q=0.7 Cache-Control: no-cache Connection: keep-alive Cookie: JSESSIONID=EA9A3D0AC31CDB51C68E0806CD5C32E1 DNT: 1 Host: localhost:8080 Pragma: no-cache Referer: http://localhost:8080/reclamation/list-complaint.action Sec-Fetch-Dest: style Sec-Fetch-Mode: no-cors Sec-Fetch-Site: same-origin User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Mobile Safari/537.36
permitAll 不是解决方案,因为它允许访问但保留安全过滤器
<http pattern="/css/**" security="none"/>
有效,但它会删除 X-Content-Type-Options: css 文件的 nosniff。顺便说一句,security="none" 解决了使用 eclipse 时的问题,但是当我直接在 tomcat9 中部署 war 时,它会被忽略并且 css 文件不会加载.
我的配置:struts2,jdk8 tomcat 9.0.19,spring security 5.1.6.RELEASE
我找到了解决方案,我的过滤器正在将所有文件更改为“text/html”
public class CharacterSetFilter implements Filter {
public void destroy() {}
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain next) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");//this line was the problem
response.setCharacterEncoding("UTF-8");
next.doFilter(request, response);
}
// ...
}