#java #cors
Вопрос:
Я пытаюсь реализовать CORS, где клиент и сервер находятся в одном URL-адресе, используя фильтр CORS. Ниже приведен код, который я реализовал
Фильтр CORS
package com.core.web.spring.cors;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CORSFilter implements Filter{
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
((HttpServletResponse) res).addHeader("Access-Control-Allow-Origin", "http://192.168.0.103:1111");
((HttpServletResponse) res).addHeader("Access-Control-Allow-Methods",
"GET, POST");
((HttpServletResponse) res).addHeader("Access-Control-Max-Age", "3600");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
}
web.xml
<filter>
<filter-name>cors</filter-name>
<filter-class>com.core.web.spring.cors.CORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Я установил исходное значение Access-Control-Allow как http://192.168.0.103:1111. Я меняю происхождение на http://192.168.0.108:1111 из инструмента почтальона. Но вместо того, чтобы блокировать запрос, он его выполняет. Я получаю успешный ответ.
Ниже приведен заголовок запроса и заголовок ответа
Заголовок запроса
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8
Connection: keep-alive
Content-Length: 1296
Content-Type: text/html; charset=UTF-8`enter code here`
Host: 192.168.0.103:1111
Origin: http://192.168.0.108:1111
Referer: http://192.168.0.103:1111/SampleTest/index.html
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36
X-Requested-With: XMLHttpRequest
Заголовок ответа
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Origin: http://192.168.0.103:1111
Access-Control-Max-Age: 3600
Connection: keep-alive
Content-Length: 1210
Date: Sat, 03 Jul 2021 06:11:55 GMT
Server: WildFly/11
Strict-Transport-Security: max-age=7776000; includeSubdomains
X-Content-Type-Options: nosniff
X-FRAME-OPTIONS: SAMEORIGIN
X-Powered-By: Undertow/1
Кто-нибудь может мне в этом помочь?
Ответ №1:
Почтальона не волнует SOP (Политика того же происхождения), это инструмент разработки, а не браузер.
CORS (Совместное использование ресурсов разных источников) и SOP (Политика одного источника)-это конфигурации на стороне сервера, которые клиенты решают применять или нет.
Связанные с клиентами
Большинство браузеров применяют его для предотвращения проблем, связанных с атаками CSRF. Большинству инструментов разработки это безразлично. Postman, являющийся инструментом разработки, не будет придавать большого значения заголовку CORS, вам понадобится что-то еще для тестирования.
Существуют расширения Chrome, которые могут помочь вам протестировать CORS в вашем браузере.