繁体   English   中英

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握手类似于

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM