java的session报错_【Java】在springboot里面使用HttpSessionConfigurator报错

ed719850148dbbb00da06a05c3328d84.png

package cn.springbootlearn.socket;

import cn.spring.inter.bean.ResponseData;

import cn.spring.inter.bean.RoundData;

import cn.spring.inter.bean.User;

import cn.spring.inter.bean.UserGridInfo;

import cn.spring.inter.utils.ChessDataCompute;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import org.springframework.stereotype.Controller;

import javax.servlet.http.HttpSession;

import javax.websocket.CloseReason;

import javax.websocket.EndpointConfig;

import javax.websocket.OnClose;

import javax.websocket.OnError;

import javax.websocket.OnMessage;

import javax.websocket.OnOpen;

import javax.websocket.Session;

import javax.websocket.server.PathParam;

import javax.websocket.server.ServerEndpoint;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import java.util.concurrent.ConcurrentHashMap;

import java.util.concurrent.CopyOnWriteArraySet;

@Controller

@ServerEndpoint(value="/websocket/{info}", configurator = HttpSessionConfigurator.class)

public class Socket {

//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

private static int onlineCount = 0;

/*websocket 客户端会话 通过Session 向客户端发送数据*/

private Session session;

/*线程安全set 存放每个客户端处理消息的对象*/

private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet();

/*websocket 连接建立成功后进行调用*/

private static Map userList = new HashMap();

private static SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//创建时间格式对象

/**

* 功能:创建一个房间的集合,用来存放房间

* concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。

* 若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

*/

private static ConcurrentHashMap> roomList = new ConcurrentHashMap>();

//重新加入房间的标示;

private int rejoin = 0;

static {

roomList.put("room1", new ConcurrentHashMap());

roomList.put("room2", new ConcurrentHashMap());

roomList.put("wuxian20200424", new ConcurrentHashMap());

}

private static Map recordMap = new HashMap();

Map userMap = new HashMap();

@OnOpen

public void onOpen(@PathParam(value = "info") String param, Session session, EndpointConfig config) {

this.session = session;

String flag = param.split("[|]")[0]; //标识

String roomId = param.split("[|]")[1]; //成员名

// 获取当前用户的session

System.out.println("sessionId = " + session.getId());

HttpSession httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());

User user = (User) httpSession.getAttribute("user"); // 获得当前用户信息

}

}

package cn.springbootlearn.socket;

import javax.servlet.http.HttpSession;

import javax.websocket.HandshakeResponse;

import javax.websocket.server.HandshakeRequest;

import javax.websocket.server.ServerEndpointConfig;

/**

* @author abbottLiu

* @Description

* @date 2020/04/28

*/

public class HttpSessionConfigurator extends ServerEndpointConfig.Configurator{

@Override

public void modifyHandshake(ServerEndpointConfig config, HandshakeRequest request, HandshakeResponse response) {

HttpSession session = (HttpSession) request.getHttpSession();

config.getUserProperties().put(HttpSession.class.getName(), session);

}

}

回答

没有示例这边不好还原测试。

倒是在网上找到了一个似乎相近的问题答案,你可以尝试看看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SessionJava Web中常用的一种状态管理技术,它可以在不同的HTTP请求之间共享数据,常用于用户登录、购物车等场景。下面我来浅谈一下Session使用Session的创建 在Servlet中,可以通过HttpServletRequest的getSession()方法来获取或创建Session对象。如果请求中已经存在Session,则返回已经存在的对象,否则创建一个新的Session对象并返回。示例代码如下: ```java HttpSession session = request.getSession(); ``` Session的存储 Session中的数据存储在服务器端,可以通过setAttribute()方法向Session中存储数据。示例代码如下: ```java session.setAttribute("username", "张三"); ``` Session的获取 在Session中存储的数据可以通过getAttribute()方法获取。示例代码如下: ```java String username = (String) session.getAttribute("username"); ``` Session的过期 Session有两种过期方式:基于时间的过期和基于使用次数的过期。基于时间的过期是指Session在一定时间内没有被使用,则失效;基于使用次数的过期是指Session在一定时间内没有被使用,则失效。 在web.xml中可以设置Session的过期时间,示例代码如下: ```xml <session-config> <session-timeout>30</session-timeout> </session-config> ``` 上述代码表示Session的过期时间为30分钟。 Session的销毁 Session可以通过invalidate()方法销毁。示例代码如下: ```java session.invalidate(); ``` 总结 SessionJava Web中常用的一种状态管理技术,可以在不同的HTTP请求之间共享数据。Session使用需要注意过期时间和销毁方式,以免造成安全隐患和资源浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值