2

在我的情况(tomcat)中,我使用 tomcat-users.xml 来管理用户和角色之间的链接

<tomcat-users>
    <role rolename="role1"/>
    <role rolename="role2"/>
    <user password="tomcat" roles="tomcat" username="tomcat"/>
    <user password="123456" roles="role1,role2" username="user1"/>
</tomcat-users>

并且 web.xml 配置如下:

<listener>
    <listener-class>com.WebSocketServletListener</listener-class>
</listener>
<security-constraint>
    <display-name>Tomcat Server Configuration Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>     
      <url-pattern>/application.jsp</url-pattern>           
    </web-resource-collection>
    <auth-constraint>
      <role-name>role1</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Cloud Authentication</realm-name>
    <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
</login-config>

与应用程序的连接有两个步骤:

  1. 我通过“login.jsp”记录我的应用程序,将我引向我的应用程序“application.jsp”的单个页面。在 application.jsp 我可以知道与 request.isUserInRole("role1"); 连接的用户的角色;

  2. application.jsp 使用服务器打开一个 WebSocket,该 webSocket 创建一个 session.java。所有通信都将通过 WebSocket 完成。问题出在 webSocket 的上下文中,我不知道我的用户的角色。

在 webSocket 的会话中恢复所有用户信息的最佳方法是什么?

4

2 回答 2

0

我不知道您在 JSP 中使用的是什么,如果您使用的是 Tomcat Websocket 类,当您使用

createWebSocketInbound

protected abstract StreamInbound createWebSocketInbound(String subProtocol,
                                                        HttpServletRequest request)

您可以阅读HttpServletRequest request,您应该能够获取所有握手数据并将连接映射到用户。它应该与 JSP 请求具有相同的上下文,但为了提高安全性,您可能应该HttpServletRequest request直接在您编写的代码中处理 webSocket 连接。

于 2012-11-30T22:00:04.727 回答
0

WebSockets 连接以正常的 HTTP 请求/响应开始,因此您应该能够像往常一样从中收集所有相关的用户详细信息。

于 2012-11-30T17:25:38.403 回答