Jetty:如何在web.xml中保护websocket连接?
我遵循并创建了最简单的websocket echo应用程序。尽管本文是关于Glassfish的,但我成功地在Jetty 9下运行了我的应用程序,因为他们在本文中使用了标准的javax.websocket API。 它工作正常,但现在我想保护websocket连接。我搜索了一下,发现大多数示例都是作为独立的Java应用程序编写的(使用Jetty:如何在web.xml中保护websocket连接?,websocket,jetty,Websocket,Jetty,我遵循并创建了最简单的websocket echo应用程序。尽管本文是关于Glassfish的,但我成功地在Jetty 9下运行了我的应用程序,因为他们在本文中使用了标准的javax.websocket API。 它工作正常,但现在我想保护websocket连接。我搜索了一下,发现大多数示例都是作为独立的Java应用程序编写的(使用publicstaticvoidmain()method)。他们创建新的ConnectionFactory,并从代码启动服务器(例如) 但我想在Jetty下作为容器运
publicstaticvoidmain()
method)。他们创建新的ConnectionFactory
,并从代码启动服务器(例如)
但我想在Jetty下作为容器运行我的应用程序,所以我只想在web.xml或其他文件中指定一些选项,以保护我的连接。所以我找到了这篇文章并修改了我的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected resource</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<!-- https -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
保护资源
/*
得到
保密的
问题是它不起作用。可能是因为这篇文章又是关于玻璃鱼的
它是如何工作的:
- 我的IDE(IDEA)在
中显示红色的所有标记,这意味着架构验证失败,并且这些标记不能包含在
中 - 当我尝试通过HTTPS打开index.html时,在浏览器中会出现错误
,Jetty输出中还有两个错误:ssl\u error\u rx\u record\u too\u long
state=START for buffer HeapByteBuffer的非法字符0x16
及
badMessage:HttpChannelOverHttp的400个非法字符0x16
所以。。我做错了什么?如何通过Jetty或应用程序配置实现安全websocket 您描述的安全约束标记主要用于指定应用服务器中的基本身份验证模式
我猜您希望启用HTTPS而不是身份验证。对于启用HTTPS,您可以阅读本文:感谢您为我指点此指南。它不是100%完整的,并且缺少一些关于码头配置的细节,但这是一个很好的起点。从它开始,我终于能够在所需的配置中运行Jetty。嗨,Andy,我在日志中看到了完全相同的错误。你能解决这个问题吗?你做了什么改变使它起作用?谢谢你好,赫里斯托。你读过下面被接受的答案中的文章了吗?是的,我已经读过了,安迪:)解决这些错误的唯一方法是删除
http
模块(在start.ini
中注释掉)。你们做了什么?事实上现在我记不清了,但我在GitHub上为你们上传了一个工作项目,所以你们可以自己看看它是如何完成的。希望这会有帮助!