【问题标题】:Adding Security Headers in response of spring MVC Application添加安全标头以响应 Spring MVC 应用程序
【发布时间】:2017-05-31 08:06:30
【问题描述】:

我想在 Spring MVC 的响应标头中添加以下标头:

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"); 
            } 
        };
     }

现在,当我点击请求并在浏览器上看到响应标头时,这两个标头没有出现。 我无处使用 urlPattern 注册过滤器。这是问题还是我错过了其他事情? 如果 urlpattern 配置是问题,那么请告诉我如何以及在哪里配置它。

无论如何,我的最终目标是在响应标头中获得两个安全标头。

【问题讨论】:

    标签: spring-mvc servlet-filters interceptor response-headers


    【解决方案1】:

    在 Spring 框架的响应中添加新的安全标头非常简单,我在这里列出了所有最常用的安全标头:-
    代码是:
    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 并查看响应。您将在回复中获得这些标题。 :)

    【讨论】:

      【解决方案2】:

      Spring Security,从 3.2 版本开始,为你添加这些头文件。

      有关其配置的更多信息:

      当然,它只有在项目中使用 Spring Security 时才有效 :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-12
        • 2015-06-10
        • 1970-01-01
        • 2019-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-06
        相关资源
        最近更新 更多