81,094
社区成员
发帖
与我相关
我的任务
分享
@ServerEndpoint(value = "/websocket/chat", configurator = SpringConfigurator.class)
public class WSRightChatting{
@Autowired
private HttpServletRequest request;
private static final Set<WSRightChatting> connections = new CopyOnWriteArraySet<WSRightChatting>();
private Session session;
private static final AtomicInteger connectionIds = new AtomicInteger(0);
private String nickname="guest";
public WSRightChatting() {
nickname = nickname + connectionIds.getAndIncrement();
}
@OnOpen
public void start(Session session)
{
this.session = session;
WSRightChatting.connections.add(this);
Admin ad=(Admin) request.getSession().getAttribute("SESSION_KEY_OP");
System.out.println(ad.getAid());
}
}
@OnOpen
public void start(Session session, EndpointConfig config) {
this.session = session;//这个session是websocket
(HttpSession) config.getUserProperties()
.get(HttpSession.class.getName());//这里的HttpSession是javax.servlet.http下的。
}
不过你要重写configurator = SpringConfigurator.class了,自己写一个,继承ServerEndpointConfig.Configurator,并重写
@Override
public void modifyHandshake(ServerEndpointConfig config,
HandshakeRequest request,
HandshakeResponse response)
{
HttpSession httpSession = (HttpSession)request.getHttpSession();
config.getUserProperties().put(HttpSession.class.getName(),httpSession);
}
握手阶段用的是http协议,可以在这一阶段把HandshakeRequest强转为HttpSession。然后放到config.getUserProperties()里,在stat函数里获取就可以了。