给定一个 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);
为了排除除GET
and之外的所有不需要的 HTTP 方法POST
,我使用以下限制或约束以及 Servlet 安全约束,在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。