添加安全性 Headers 以响应 spring MVC 应用程序
Adding Security Headers in response of spring MVC Application
我想在 Spring MVC 中的响应 header 中添加以下 headers :
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
我在扩展 WebMvcConfigurerAdapter.
的 MvcConfig 文件中编写了以下代码
@Bean
public Filter securityHeadersFilter() {
return new OncePerRequestFilter(){
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(request, response);
response.setHeader("X-XSS-Protection", "1; mode=block");
response.setHeader("X-Content-Type-Options", "nosniff");
}
};
}
现在,当我点击请求并在浏览器上看到响应 header 时,这两个 header 不会出现。
我在任何地方都没有用 urlPattern 注册过滤器。这是问题还是我错过了其他事情?
如果 urlpattern 配置有问题,请告诉我如何以及在哪里配置它。
无论如何,我的最终目标是在 Response header 中获得超过两个安全 header。
Spring安全,从3.2版本开始,添加这些headers给你。
有关其配置的更多信息:
- http://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/headers.html#headers-xss-protection
- http://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/headers.html#headers-content-type-options
当然,只有当你在项目中使用Spring安全时它才有效:)
在 spring 框架的响应中添加新的安全性 header 非常简单,我在这里列出所有最常用的安全性 headers:-
代码是:
1) 先写一个自定义的新过滤器
package com.mypackage;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.filter.OncePerRequestFilter;
public class AddHeaderFilter extends OncePerRequestFilter {
private static final Logger LOG = LoggerFactory.getLogger(AddHeaderFilter.class);
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {
response.setHeader("X-XSS-Protection", "1; mode=block");
response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setHeader("Cache-control", "no-store, no-cache");
response.setHeader("X-Frame-Options", "DENY");
response.setHeader("Set-Cookie", "XSRF-TOKEN=NDKDdfdsfkldsfNd3SZAJfwLsTl5WUgOkE; Path=/; Secure;HttpOnly");
filterChain.doFilter(request, response);
LOG.info("Exit: AddHeaderFilter");
}
}
2) 现在将此过滤器配置到您的 web.xml 文件。
<filter>
<filter-name>addHeaderFilter</filter-name>
<filter-class>com.mypackage.AddHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>addHeaderFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
就是这样。
现在点击 API 并观察回复。您将在回复中得到这些 header。 :)
我想在 Spring MVC 中的响应 header 中添加以下 headers :
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
我在扩展 WebMvcConfigurerAdapter.
的 MvcConfig 文件中编写了以下代码 @Bean
public Filter securityHeadersFilter() {
return new OncePerRequestFilter(){
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(request, response);
response.setHeader("X-XSS-Protection", "1; mode=block");
response.setHeader("X-Content-Type-Options", "nosniff");
}
};
}
现在,当我点击请求并在浏览器上看到响应 header 时,这两个 header 不会出现。 我在任何地方都没有用 urlPattern 注册过滤器。这是问题还是我错过了其他事情? 如果 urlpattern 配置有问题,请告诉我如何以及在哪里配置它。
无论如何,我的最终目标是在 Response header 中获得超过两个安全 header。
Spring安全,从3.2版本开始,添加这些headers给你。
有关其配置的更多信息:
- http://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/headers.html#headers-xss-protection
- http://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/headers.html#headers-content-type-options
当然,只有当你在项目中使用Spring安全时它才有效:)
在 spring 框架的响应中添加新的安全性 header 非常简单,我在这里列出所有最常用的安全性 headers:-
代码是:
1) 先写一个自定义的新过滤器
package com.mypackage;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.filter.OncePerRequestFilter;
public class AddHeaderFilter extends OncePerRequestFilter {
private static final Logger LOG = LoggerFactory.getLogger(AddHeaderFilter.class);
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {
response.setHeader("X-XSS-Protection", "1; mode=block");
response.setHeader("Strict-Transport-Security", "max-age=31536000; includeSubDomains");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setHeader("Cache-control", "no-store, no-cache");
response.setHeader("X-Frame-Options", "DENY");
response.setHeader("Set-Cookie", "XSRF-TOKEN=NDKDdfdsfkldsfNd3SZAJfwLsTl5WUgOkE; Path=/; Secure;HttpOnly");
filterChain.doFilter(request, response);
LOG.info("Exit: AddHeaderFilter");
}
}
2) 现在将此过滤器配置到您的 web.xml 文件。
<filter>
<filter-name>addHeaderFilter</filter-name>
<filter-class>com.mypackage.AddHeaderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>addHeaderFilter</filter-name>
<url-pattern>/api/*</url-pattern>
</filter-mapping>
就是这样。
现在点击 API 并观察回复。您将在回复中得到这些 header。 :)