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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37014990/article/details/79250877

学了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);
    }
    }





猜你喜欢

转载自blog.csdn.net/qq_37014990/article/details/79250877