HttpSession怎么读
时间: 2024-03-10 21:48:40 浏览: 63
要读取HttpSession中的数据,我们可以通过HttpServletRequest对象的getSession()方法获取当前请求的HttpSession对象,然后使用getAttribute()方法获取保存在HttpSession中的数据。例如:
```
// 获取当前请求的HttpSession对象
HttpSession session = request.getSession();
// 获取名为"username"的属性值
String username = (String)session.getAttribute("username");
```
在这个例子中,我们首先调用request.getSession()方法获取当前请求的HttpSession对象,然后使用getAttribute()方法获取名为"username"的属性值,并将其转换为String类型。我们也可以使用getIntAttribute()、getBooleanAttribute()等方法获取不同类型的属性值。需要注意的是,当我们从HttpSession中获取属性值时,如果没有找到对应的属性值,则会返回null。
相关问题
优化这段代码: public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { HandlerMethod handlerMethod = (HandlerMethod) handler; Method method = handlerMethod.getMethod(); RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); if (annotation != null) { if (this.isRepeatSubmit(request, annotation)) { AjaxResult ajaxResult = AjaxResult.error(annotation.message()); ServletUtils.renderString(response, JSON.toJSONString(ajaxResult)); return false; } } } boolean flag = false; TokenService tokenService = SpringUtils.getBean(TokenService.class); LoginAppUser loginUser = tokenService.getLoginUser(request); if (loginUser != null && loginUser.getGuest() != null && loginUser.getGuest().getGuestNum() != null) { tokenService.verifyToken(loginUser); String guestNum = loginUser.getGuest().getGuestNum(); HttpSession httpSession = request.getSession(); RedisCache redisUtil = SpringUtils.getBean(RedisCache.class); Guest guest = redisUtil.getCacheMapValue(RedisConstants.GUEST_MAP, guestNum); SysGuest sysGuest = JSON.parseObject(JSON.toJSONString(guest), SysGuest.class); if (sysGuest == null) { flag = false; httpSession.removeAttribute(Constants.SERVER_TYPE_APP); } else { if (httpSession.getAttribute(Constants.SERVER_TYPE_APP) == null) { httpSession.setAttribute(Constants.SERVER_TYPE_APP , sysGuest); } return true; } } //获取网名 也就是/login String servletPath = request.getServletPath(); if(servletPath.contains("/app/card/isCard") || servletPath.contains("/app/bank/signingBankCard") || servletPath.contains("/app/bank/sendMessage") || servletPath.contains("/app/bank/sendSysMessage") || servletPath.contains("/app/bank/login") || servletPath.contains("/app/card/guestIdAndPhone") || servletPath.contains("/app/family/isDevice") || servletPath.contains("/websocket/") || servletPath.contains("/upload/") || servletPath.contains("/app/deviceSocket/toSocket")) { flag = true; } if (!flag) { noLogin(response); } return flag; }
首先,可以将比较长的 if 语句拆分成多个小的 if 语句,这样可以使代码更易读。例如,可以将 `if (loginUser != null && loginUser.getGuest() != null && loginUser.getGuest().getGuestNum() != null)` 拆分成三个 if 语句。
其次,可以使用常量或者枚举类型来表示一些常用的字符串,例如 Constants.SERVER_TYPE_APP 和 RedisConstants.GUEST_MAP。
最后,可以使用 try-with-resources 语句来自动关闭资源,例如 redisUtil。这样可以避免因为忘记关闭资源而导致的内存泄漏问题。
以下是优化后的代码:
```
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class);
if (annotation != null) {
if (this.isRepeatSubmit(request, annotation)) {
AjaxResult ajaxResult = AjaxResult.error(annotation.message());
ServletUtils.renderString(response, JSON.toJSONString(ajaxResult));
return false;
}
}
}
boolean flag = false;
TokenService tokenService = SpringUtils.getBean(TokenService.class);
LoginAppUser loginUser = tokenService.getLoginUser(request);
if (loginUser != null) {
Guest guest = loginUser.getGuest();
if (guest != null) {
String guestNum = guest.getGuestNum();
tokenService.verifyToken(loginUser);
HttpSession httpSession = request.getSession();
RedisCache redisUtil = SpringUtils.getBean(RedisCache.class);
try (redisUtil) {
Guest cacheGuest = redisUtil.getCacheMapValue(RedisConstants.GUEST_MAP, guestNum);
SysGuest sysGuest = JSON.parseObject(JSON.toJSONString(cacheGuest), SysGuest.class);
if (sysGuest != null) {
if (httpSession.getAttribute(Constants.SERVER_TYPE_APP) == null) {
httpSession.setAttribute(Constants.SERVER_TYPE_APP, sysGuest);
}
return true;
}
}
}
}
String servletPath = request.getServletPath();
if (servletPath.contains("/app/card/isCard")
|| servletPath.contains("/app/bank/signingBankCard")
|| servletPath.contains("/app/bank/sendMessage")
|| servletPath.contains("/app/bank/sendSysMessage")
|| servletPath.contains("/app/bank/login")
|| servletPath.contains("/app/card/guestIdAndPhone")
|| servletPath.contains("/app/family/isDevice")
|| servletPath.contains("/websocket/")
|| servletPath.contains("/upload/")
|| servletPath.contains("/app/deviceSocket/toSocket")) {
flag = true;
}
if (!flag) {
noLogin(response);
}
return flag;
}
```
session的读数据方法
在Web应用程序中,Session是一种在服务器上存储数据的方式。Session数据存储在服务器端,而不是在客户端,因此可以更安全地存储敏感数据。在Java中,可以使用Servlet API提供的方法来读取Session数据。以下是读取Session数据的代码示例:
```java
// 获取session对象
HttpSession session = request.getSession();
// 读取session中的数据
String username = (String) session.getAttribute("username");
```
在上面的代码示例中,我们首先从请求对象中获取Session对象,然后使用getAttribute()方法读取Session中存储的数据。在这个例子中,我们假设在Session中存储了一个名为“username”的字符串。
阅读全文