2 votes

Comment passer les rôles d'une session http à une websocket ?

Dans ma situation (tomcat), j'utilise tomcat-users.xml pour gérer le lien entre les utilisateurs et les rôles.

<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>

et le web.xml est configuré comme ça :

<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>

La connexion à l'application se fait en deux étapes :

  1. Je connecte mon application via 'login.jsp' qui me renvoie à la page unique de mon application 'application.jsp'. Dans application.jsp je peux connaître les rôles de l'utilisateur connecté avec request.isUserInRole("role1") ;

  2. application.jsp ouvre un WebSocket avec le serveur et le WebSocket crée une session.java. Toutes les communications se feront par le biais de la WebSocket. Le problème est que dans le contexte de la webSocket, je ne connais pas les rôles de mon utilisateur.

Quelle est la meilleure façon de récupérer toutes les informations de l'utilisateur dans la session de la webSocket ?

0voto

djc Points 6761

Une connexion WebSockets commence par une demande/réponse HTTP normale, de sorte que vous devriez être en mesure de glaner tous les détails pertinents sur l'utilisateur, comme d'habitude.

0voto

Axel Points 311

Je ne sais pas ce que vous utilisez dans votre JSP, si vous utilisez la classe Tomcat Websocket, lorsque vous utilisez

createWebSocketInbound

protected abstract StreamInbound createWebSocketInbound(String subProtocol,
                                                        HttpServletRequest request)

vous pouvez lire le HttpServletRequest request vous devriez pouvoir obtenir toutes les données de la poignée de main et associer la connexion à l'utilisateur. Le contexte devrait être le même que celui de la requête JSP, mais pour plus de sécurité, vous devriez probablement gérer les données d'identification de l'utilisateur. HttpServletRequest request directement dans le code que vous écrivez pour gérer la connexion webSocket.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X