浅谈spring优雅获取session的方式之一

学了java接近一年,除了刚开始写了几篇基础知识的博客,之后便寥寥无几。

今天,笔者给大家分享spring如何优雅的获取session的方式之一,诚然spring/mvc有多种方法获取session,但笔者暂时只会一种。

闲话少说,要想获取session那么我们先在web.xml中配置一段XML代码:

  <!-- session监听器 -->
  <listener>
  	<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
  </listener>
这段代码的作用,便是启动session监听器。

在这里,读者可以打开RequestContextListener的源码如下:

public class RequestContextListener implements ServletRequestListener {


	private static final String REQUEST_ATTRIBUTES_ATTRIBUTE =
			RequestContextListener.class.getName() + ".REQUEST_ATTRIBUTES";

	@Override
	public void requestInitialized(ServletRequestEvent requestEvent) {
		if (!(requestEvent.getServletRequest() instanceof HttpServletRequest)) {
			throw new IllegalArgumentException(
					"Request is not an HttpServletRequest: " + requestEvent.getServletRequest());
		}
		HttpServletRequest request = (HttpServletRequest) requestEvent.getServletRequest();
		ServletRequestAttributes attributes = new ServletRequestAttributes(request);
		request.setAttribute(REQUEST_ATTRIBUTES_ATTRIBUTE, attributes);
		LocaleContextHolder.setLocale(request.getLocale());
		RequestContextHolder.setRequestAttributes(attributes);
	}
以上源码看不懂可以忽略。

在web.xml中设置了监听器后,我们便可以编写简单的实现类。

如下:

注意,获取session是要用RequestContextHolder来获取,具体原因请读者仔细看RequestContextListener源码。

    public class UserContext {
   
    public static final String USER_IN_SESSION = "user";
   
    private static HttpSession getSession() { //获取session
    return ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes())
    .getRequest().getSession();
    }
   
    public static void putCurrent(LoginInfo info){
    //得到session,并把info放在session中
    getSession().setAttribute(USER_IN_SESSION, info);
    }
   
    public static LoginInfo getCurrent(){
    return (LoginInfo) getSession().getAttribute(USER_IN_SESSION);
    }
    }





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值