Пожалуйста, объясните код предполетного фильтра в Spring Boot - PullRequest
1 голос
/ 30 июня 2019

У меня есть некоторый код о предполетном фильтре при загрузке Spring, но я не знаю назначение этого кода:

@Component
// We want to put this in front of SpringSessionFilter
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RequestFilter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, x-auth-token");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        if(!(request.getMethod().equalsIgnoreCase("OPTIONS"))) {
            try {
                chain.doFilter(req, res);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("Pre-fight");
            response.setHeader("Access-Control-Allowed-Methods", "POST, GET, DELETE");
            response.setHeader("Access-Control-Max-Age", "3600");
            response.setHeader("Access-Control-Allow-Headers", "authorization, content-type, x-auth-token, " +
                    "access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with");
            response.setStatus(HttpServletResponse.SC_OK);
        }
    }

    public void init(FilterConfig filterConfig) {}

    public void destroy() {}

}

И это объяснение для этого файла:

Таким образом, когда Angular 2 отправляет вызов http post ajax, он сначала отправит предварительный запрос, и тип метода будет не «POST», а «OPTIONS».Если этот предварительный полет имеет действительный ответ, он начнет отправлять реальное сообщение http.Это сделано для предотвращения межсайтовой атаки.В бэкэнде у Spring нет встроенной обработки для этого.Поэтому нам нужно проверить, является ли http-метод предварительным или нет.Если это так, мы просто ответим правильными заголовками и информациейЕсли нет, мы просто продолжим цепочку фильтров.

Но я не могу понять исходный код.Кто-нибудь может объяснить для меня?

1 Ответ

2 голосов
/ 01 июля 2019

Почему response.setHeader («Access-Control-Allow-Origin», «*»);

Cross-Origin Resource Sharing (CORS) - это концепция безопасности, которая позволяет ограничивать ресурсы, реализованные в веб-браузерах. Это предотвращает создание или использование кода JavaScript запросов различного происхождения.

Например, ваше веб-приложение работает на порту 8080, и с помощью JavaScript вы пытаетесь использовать веб-службы RESTful с порта 9090. В таких ситуациях вы столкнетесь с проблемой безопасности перекрестного общего доступа к ресурсам в своих веб-браузерах. Для предоставления доступа вы можете установить его как * или для своего домена

Предварительный запрос CORS - это запрос CORS, который проверяет, понятен ли протокол CORS.

Это запрос OPTIONS, использующий три заголовка HTTP-запроса: Access-Control-Request-Method, Access-Control-Request-Headers, and the Origin header.

Запрос preflight automatically выдается браузером при необходимости. В обычных случаях разработчикам внешнего интерфейса не нужно самим создавать такие запросы.

Например, клиент может запросить сервер, разрешит ли он запрос DELETE, перед отправкой запроса DELETE, используя запрос предварительной проверки:

OPTIONS /resource/foo 
Access-Control-Request-Method: DELETE 
Access-Control-Request-Headers: origin, x-requested-with
Origin: https://foo.bar.org

Если сервер разрешает это, то он ответит на запрос предварительной проверки заголовком ответа Access-Control-Allow-Methods, в котором указано DELETE:

HTTP/1.1 204 No Content
Connection: keep-alive
Access-Control-Allow-Origin: https://foo.bar.org
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE
Access-Control-Max-Age: 86400

Что такое FilterChain?

FilterChain Фильтры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...