[英]Websocket (java ee) how to get role of current user
我刚刚在我的java ee jax-rs应用程序中添加了Websocket端点。 在Jax-Rs端点内,我可以通过SecurityContext访问用户的角色。
但是在websocket中,我无法注入上下文内容。 那么如何知道尝试打开websocket会话的用户的角色?
为此,您将必须修改Websocket握手。 您可以按照以下步骤进行操作:
1)修改您的websocket端点以使用自定义配置器
@ServerEndpoint(value = "/someWSEndpoint", configurator = SomeCustomConfigurationClass.class)
public class SomeWSService {
...
}
2)修改WS握手类似于
public class SomeCustomConfigurationClass extends ServerEndpointConfig.Configurator {
@Override
public void modifyHandshake(ServerEndpointConfig config,
HandshakeRequest request,
HandshakeResponse response) {
config.getUserProperties().put("UserPrincipal",request.getUserPrincipal());
config.getUserProperties().put("userInRole", request.isUserInRole("someRole"));
}
}
3)现在,您可以在ws端点类中以以下方式访问此文件:
@OnOpen
public void onOpen(final Session session, EndpointConfig config) {
Principal userPrincipal = (Principal) config.getUserProperties().get("UserPrincipal");
Boolean userInRole = (Boolean) config.getUserProperties().get("userInRole");
//do what ever you like with it
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.