添加安全性 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给你。

有关其配置的更多信息:

当然,只有当你在项目中使用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。 :)