我刚刚在我的java ee jax-rs应用程序中添加了一个Websocket端点。在Jax-Rs端点中,我可以通过SecurityContext访问用户的角色。
但是在websocket中我不能注入上下文的东西。那么如何知道试图打开websocket会话的用户的角色呢?
答案 0 :(得分:5)
为此,您必须修改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
}