Websocket (java ee) 如何获取当前用户的角色
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 Handshake 类似于
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 端点 class 作为
访问它
@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
}
我刚刚向我的 java ee jax-rs 应用程序添加了一个 Websocket 端点。在 Jax-Rs 端点内,我可以通过 SecurityContext 访问用户的角色。
但在 websocket 中我无法注入上下文内容。那么如何知道试图打开 websocket 会话的用户的角色呢?
为此,您必须修改 Websocket 握手。您可以按以下方式执行此操作:
1) 修改您的 websocket 端点以使用自定义配置器
@ServerEndpoint(value = "/someWSEndpoint", configurator = SomeCustomConfigurationClass.class)
public class SomeWSService {
...
}
2) 修改 WS Handshake 类似于
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 端点 class 作为
访问它@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
}