Учитывая конечную точку WebSocket следующим образом.
@ServerEndpoint(value = "/Push/CartPush/{token}")
public final class CartPush {
// ...
}
Конечная точка может принимать параметр пути {token}
. Однако параметр пути является необязательным, который определяется динамически во время выполнения в Java Script. Пропуск этого параметра в JavaScript, как показано ниже, приводит к 404
.
var ws = new WebSocket("wss://localhost:8443/ContextPath/Push/CartPush");
Ошибка подключения WebSocket к
'wss://localhost:8443/ContextPath/Push/CartPush'
: ошибка во время рукопожатия WebSocket: неожиданный код ответа: 404
Это делает значение токена обязательным следующим образом.
var token = "token value";
var ws = new WebSocket("wss://localhost:8443/ContextPath/Push/CartPush" + "/" + token);
Чтобы исключить все ненужные методы HTTP, кроме GET
и POST
, я использую следующие ограничения или ограничения вместе с ограничениями безопасности сервлета, используя соответствующие шаблоны URL и сопоставления ролей в web.xml
.
<security-constraint>
<web-resource-collection>
<web-resource-name>Disable unneeded HTTP methods by 403</web-resource-name>
<url-pattern>/Public/*</url-pattern>
<url-pattern>/Push/*</url-pattern>
<url-pattern>/javax.faces.resource/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
</security-constraint>
<deny-uncovered-http-methods/> <!-- Requires Servlet 3.1 -->
Как сделать данный параметр пути необязательным?
Используется сервер WildFly 10.0.0 final / Java EE 7.
/Push/CartPush
, даже если<url-pattern>/Push/*</url-pattern>
будет исключено или удалено изweb.xml
. WildFly, с другой стороны, сообщал бы403
с/Push/CartPush
, когда этот<url-pattern>
был исключен изweb.xml
. Я не знаю причины. - person Tiny   schedule 04.03.2016