java session 管理器_JavaWeb项目中写一个SessionUtil(Session中内容的管理器)

最近在写自己的一个SpringBoot练习小项目,(网上商城),里面较多的遇到了从Session中存取对象的情况,于是就想着把Session封装起来,帮助自己使用。

旧方法,也是百度首页的方法。非常的不方便。

// 比如这个作者是在Controller层进行了Request传参

@RequestMapping(value = "/angus/**", method = RequestMethod.GET)

@ResponseBody

public String getProcess(HttpServletRequest request){

HttpSession session = request.getSession();

User user = session.getAttribute("user");

}

---------------------

作者:王大淼 原文:https://blog.csdn.net/b222007/article/details/78677700

又或者是稍微用到了Spring的自动注入的方法。(参考文章:SpringBoot三种获取Request和Response的方法)

(当然我的SessionUtil 并没有用到Spring.)

@Autowired

private HttpServletRequest request;

@Autowired

private HttpServletResponse response;

// 这个方法可以成功,但是,但是,你想象一下,每个类中只要有一个方法用到了Session,

// 那么你就要自动注入一个 HttpServletRequest request...

// 实在是不够灵活和方便.

public void doSth(){

HttpSession = request.getSession();

}

因为我是一个SpringBoot 项目,我就百般百度,终于找到了一个比较好用的封装类SessionUtil :Spring MVC 操作Session的工具类

于是我最后封装出来的结果是:(这样我就能在任意层随意调用session的存储了。)

import cn.edu.zzuli.bean.Shop;

import cn.edu.zzuli.bean.User;

import org.apache.catalina.servlet4preview.http.HttpServletRequest;

import org.springframework.web.context.request.RequestContextHolder;

import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpSession;

/**

* @ClassName SessionUtil

* @Description 对于Session中的操作,封装起来,因为键值对中的键是String类型,不便于控制,在这里可以隐藏细节。

* @Author 过道

* @Date 2018/12/24 21:00

* @Version 1.0

*/

public class SessionUtil {

// 获取一个session对象

private static HttpSession session = getSession();

/**

* user在session中的名字,也就是键值对的键。

*/

private static final String USER_NAME_IN_SESSION = "user";

/**

* shop在session中的名字,也就是键值对的键。

*/

private static final String SHOP_NAME_IN_SESSION = "shop";

/**

* 获取session 的方法

*

* @return HttpSession

*/

public static HttpSession getSession() {

HttpSession session = null;

try {

session = getRequest().getSession();

} catch (Exception e) {

}

return session;

}

/**

* 获取一个request对象的方法

*

* @return HttpServletRequest

*/

public static HttpServletRequest getRequest() {

ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

return (HttpServletRequest) attrs.getRequest();

}

/**

* 从session中获取到当前用户

*

* @return

*/

public static User getUserFromSession() {

return (User) session.getAttribute(USER_NAME_IN_SESSION);

}

/**

* 更新Session中的user

*

* @return

*/

public static User updateUserInSession(User user) {

// 直接放入user,顶替掉原来session中的user

return putUserIntoSession(user);

}

/**

* 将user放入Session对象中

*

* @param user 用户

* @return

*/

public static User putUserIntoSession(User user) {

session.setAttribute(USER_NAME_IN_SESSION, user);

return getUserFromSession();

}

/**

* 从session中移除User对象

*

* @return

*/

public static User removeUserFromSession() {

User user = getUserFromSession();

session.removeAttribute(USER_NAME_IN_SESSION);

// 移出商店,如果有的话

if (getShopFromSession() != null) {

removeShopFromSession();

}

return user;

}

/**

* 将shop放入Session对象

*

* @param shop 商店

*/

public static void putShopIntoSession(Shop shop) {

session.setAttribute(SHOP_NAME_IN_SESSION, shop);

}

/**

* 从session中移除User对象

*

* @return

*/

public static Shop removeShopFromSession() {

Shop shop = getShopFromSession();

session.removeAttribute(SHOP_NAME_IN_SESSION);

return shop;

}

/**

* 从Session中获取到Shop

*

* @return 将Session中的Shop返回

*/

private static Shop getShopFromSession() {

return (Shop) session.getAttribute(SHOP_NAME_IN_SESSION);

}

}

比如在登陆Service层里,我的写法就是:

/**

* 用户登录操作。将用户存入session,如果他是店家,那么商店也应该被存入Session

*

* @param userName 用户名称

* @param pwd 用户密码

* @return 相关的用户信息

*/

@Override

public User login(String userName, String pwd) {

//MD5 加密后再与数据库中的密码进行比对

pwd = MD5Util.md5Pwd(pwd);

// 通过userName和pwd得到数据库中对应的记录,

User user = userMapper.login(userName, pwd);

if (user != null) {

user.setPwd(null);

// 得到user对象, 存入Session中

SessionUtil.putUserIntoSession(user);

// 如果用户是一个店家,那么将商店的id放到

if (user.getRole().equals(UserRoleEnum.SHOPPER)) {

Shop shop = shopService.getShopByShopperId(user.getUserId());

SessionUtil.putShopIntoSession(shop);

}

}

return user;

}

测试一下后成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值