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 :
-
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") ;
-
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 ?