Добавление заголовков безопасности в ответ на весеннее приложение MVC

Я хочу добавить заголовки ниже в заголовок ответа в Spring MVC:

X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff

Я написал ниже код в файле MvcConfig, который расширяет WebMvcConfigurerAdapter.

 @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. Это проблема или я пропустил что-то еще? если проблема в конфигурации URL-адреса, то, пожалуйста, скажите мне, как и где ее настроить.

В любом случае, моя конечная цель - получить более двух заголовков безопасности в заголовке ответа.


person Abhishek Singh    schedule 16.01.2017    source источник


Ответы (2)


Добавить новый заголовок безопасности в свой ответ в Spring framework довольно просто, я перечисляю здесь все наиболее часто используемые заголовки безопасности: -
Код:
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 и посмотрите ответ. вы получите эти заголовки в своем ответе. :)

person Abhishek Singh    schedule 09.04.2017

Spring Security, начиная с версии 3.2, добавьте эти заголовки для вашего.

Подробнее о его конфигурации:

Разумеется, это работает, только если вы используете Spring Security в проекте :)

person Slava Semushin    schedule 17.01.2017