Почему Spring doc сообщает, что браузеры поддерживают только метод GET и POST - PullRequest
0 голосов
/ 25 октября 2018

Я читал документацию для HiddenHttpMethodFilter здесь , и вот это:

Фильтр, который преобразует параметры опубликованного метода в методы HTTP, которые можно получить с помощью HttpServletRequest.getMethod (),Поскольку в настоящее время браузеры поддерживают только GET и POST, распространенная техника, используемая, например, библиотекой Prototype, заключается в использовании обычного POST с дополнительным скрытым полем формы (_method) для передачи «реального» метода HTTP.Этот фильтр считывает этот параметр и соответственно изменяет возвращаемое значение HttpServletRequestWrapper.getMethod ().Разрешены только HTTP-методы "PUT", "DELETE" и "PATCH".

, очевидно, браузеры поддерживают больше, чем просто GET и POST, ссылка не для старой версии SpringЯ имею в виду, что широко распространенный фреймворк, такой как spring, имеет точную документацию.

так чего мне не хватает?

Ответы [ 3 ]

0 голосов
/ 25 октября 2018

Может быть, вам нужно добавить только один фильтр, надеюсь, он будет вам полезен.

@WebFilter(asyncSupported = true, urlPatterns = {"/*"})
public class DeckCORSFilter implements Filter {

    /**
     * Logger
     */
    private static final Logger M_LOG = Logger.getLogger(DeckCORSFilter.class);

    /*
     * (non-Javadoc)
     * 
     * @see javax.servlet.Filter#destroy()
     */
    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    /*
     * (non-Javadoc)
     * 
     * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
     * javax.servlet.ServletResponse, javax.servlet.FilterChain)
     */
    @Override
    public void doFilter(final ServletRequest req, final ServletResponse res,
            final FilterChain chain) throws IOException, ServletException {
        if (M_LOG.isDebugEnabled()) {
            M_LOG.debug("CORS filter enabled...........");
            M_LOG.debug("CORS filter req.........." + req.toString());

        }

        final HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");// allow access
        // from all
        // orgins
        response.setHeader("Access-Control-Allow-Methods",
                "POST, GET, PUT, OPTIONS, DELETE");// allows only specified
        // methods
        // gives the value in seconds for how long the response to the preflight
        // request can be cached for without sending another preflight request.
        response.setHeader("Access-Control-Max-Age", "3600");
        // Content-Type, confirming that these are permitted headers to be used
        // with the actual request
        response.setHeader("Access-Control-Allow-Headers",
                "x-requested-with,Content-Type,Authorization");
        chain.doFilter(req, res);

    }

    /*
     * (non-Javadoc)
     * 
     * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
     */
    @Override
    public void init(final FilterConfig filerConfig) throws ServletException {
        // TODO Auto-generated method stub

    }

}
0 голосов
/ 25 октября 2018

Под ссылкой подразумевается, что элемент <form></form> html может иметь только метод POST или GET:

Это для POST: <form method="POST" ...></form>

Этодля GET: <form method="GET" ...></form>

Используйте его как фрагмент кода ниже, если вы хотите использовать не POST и GET.
Например, если вы хотите использовать PUT:

<form method="POST" ...>
  <input type="hidden" name="_method" value="PUT" />
</form>

Если вы используете его как <form method="PUT" ...></form>, он не будет работать.

Для получения дополнительной информации прочитайте это .

0 голосов
/ 25 октября 2018

Я предполагаю, что вы ссылаетесь на часть конфигурации в вашем web.xml, что-то вроде этого:

  <filter>
    <filter-name>method-filter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>

  <filter-mapping>
    <filter-name>method-filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

На что вы ссылаетесь, это функция, которая охватывает сценарии для браузеров, которые не поддерживают определенный запростипов, и он все еще может быть полезен в определенных сценариях, если / когда добавляются новые типы запросов, но браузеры их не поддерживают.

Еще одна похожая вещь о «избыточности», которую вы можете заметить во многих проектах, этот. е. использование CharacterEncodingFilter многими внутренними разработчиками, когда они устанавливают свои REST API.Нечто подобное можно было бы увидеть в таком случае в их web.xml:

<filter>
    <filter-name>encoding-filter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>encoding-filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

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

TL; DR: Spring - это готовая к работе инфраструктура, которая предоставляет не только новые функции, но и охватывает такие проблемы, как пограничные сценарии, обратная совместимость и стратегии перехода к новым технологиям.

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