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>

アプリケーションへの接続には、次の 2 つの手順があります。

  1. 「login.jsp」を介してアプリケーションをログに記録し、アプリケーション「application.jsp」の単一ページを参照します。application.jsp では、request.isUserInRole("role1"); で接続されたユーザーのロールを知ることができます。

  2. application.jsp はサーバーで WebSocket を開き、webSocket は session.java を作成します。すべての通信は WebSocket を介して行われます。問題は、ユーザーの役割がわからない webSocket のコンテキストにあります。

webSocket のセッションですべてのユーザー情報を回復する最善の方法は何ですか?

4

2 に答える 2

0

WebSocket接続は通常のHTTP要求/応答で開始されるため、通常どおり、関連するすべてのユーザーの詳細をそこから収集できるはずです。

于 2012-11-30T17:25:38.403 に答える
0

Tomcat Websocket クラスを使用している場合、JSP で何を使用しているかわかりません。

createWebSocketInbound

protected abstract StreamInbound createWebSocketInbound(String subProtocol,
                                                        HttpServletRequest request)

を読み取ることがHttpServletRequest requestできます。すべてのハンドシェイク データを取得し、接続をユーザーにマップできるはずです。JSP リクエストと同じコンテキストを持つ必要がありますが、セキュリティを強化するためHttpServletRequest requestに、webSocket 接続を処理するために記述したコードで直接処理する必要があります。

于 2012-11-30T22:00:04.727 に答える