对于普通类获取Session中数据的问题

Vity 发布于 2014/01/15 10:50
阅读 1K+
收藏 7

@JFinal 你好,想跟你请教个问题:在spring架构中可以通过多种方式在普通类获取当前Session中的数据,例如获取当前登陆用户的信息,请问下,在jfinal中是否已经有现成实现?还是需自己编写线程类保存获取?

加载中
0
JFinal
JFinal

     不建议普通类可以获取 session 哈,这样做程序的耦合度会增加,建议在 controller 获取到 session,再从 session中获取需要的对象,通过传参的方式再交给普通类。

    如果非得要在任何地方获得Session,也可以很简单的实现,如下是实现代码:

public class SessionKit {
  private static ThreadLocal<Session> sessions = new ThreadLocal<Session>();
 
  public static void set(Session s) {
    if (session != null)
      sessions.set(s);
  }

  public static Session get() {
    return sessions.get();
  }

  public static void remove() {
    sessions.remove();
  }
}

public class SessionInterceptor implements Interceptor {
  public void intercept(ActionInvocation ai) {
    SessionKit.set(ai.getController().getSession());
    try {
      ai.invoke();
    }
    finally {
      SessionKit.remove();
    }
  }
}
    将上面的 SessionInterceptor设置为全局拦截器即可: me.add(new SessionInterceptor()); 这样就可以在任何地方通过 SessionKit.get() 来获取 Session 对象了
slgstar
slgstar
这种方式只对controller里的方法有效,如果是普通的方法还是获取不到session,除非在拦截方法里继续调用普通方法相当于在同一个线程里才可以,有没有什么方式可以没有这些限制,直接调用某个方法就可以获取session?
Vity
Vity
昨天下午解决了 和你的思路一样。。。。
0
RobertCool
RobertCool
目前没发现JFinal中可以在任何地方获取Session。

可以通过Controller的子类获取Session。

0
糊搞
使用LocalThread解耦就可以了
返回顶部
顶部