給定WebSocket端點如下。在Java EE的WebSocket端點中使路徑參數可選
@ServerEndpoint(value = "/Push/CartPush/{token}")
public final class CartPush {
// ...
}
端點能夠接受路徑參數{token}
。但是,路徑參數是可選的,它是在Java腳本的運行時動態確定的。在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
和POST
所有不需要的HTTP方法,我用下面的限制或約束,使用適當的URL模式和角色映射在web.xml
Servlet安全限制一起。
<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最後/的Java EE 7
我不知道什麼安全性約束得到了與具體問題做。問題仍然會保持良好,當你離開它。 – BalusC
我添加了該部分作爲附加信息,因爲即使從'web.xml'中排除或刪除'/Push/* url-pattern>',GlassFish(4.1)可以像'/ Push/CartPush'一樣使用URI。另一方面,WildFly在從'web.xml'中排除''時,會用'/ Push/CartPush'報告'403'。我不知道原因。 –
Tiny