当前位置: 代码迷 >> J2EE >> 请问关于HttpSessionAttributeListener的有关问题(初学)
  详细解决方案

请问关于HttpSessionAttributeListener的有关问题(初学)

热度:538   发布时间:2016-04-22 00:43:34.0
请教关于HttpSessionAttributeListener的问题(初学)
我开始学习的时候写了一个类,这个类implements HttpSessionAttributeListener

然后在attributeAdded方法里面得到每个登录的Session,在Session里面得到userId

具体写法是:

Java code
int userid=0;public void attributeAdded(HttpSessionBindingEvent arg0) {        // TODO 自动生成方法存根        if(arg0.getSession().getAttribute("user")!=null){            Login login=(Login)arg0.getSession().getAttribute("user");            userid=login.getUid();            //System.out.println(userid);        }    }


插入日志的方法如下:
Java code
public boolean addLog(String log,String type){                boolean bool=false;        if(userid!=0){            Object[] parpre=new Object[4];            parpre[0]=userid;            parpre[1]=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());            parpre[2]=type;            parpre[3]=log;            bool=sqlhelp.executeUpdate("insert into log (managerid,datetime,acttype,loginfo) values (?,?,?,?)",parpre);        }        return bool;    }


现在问题来了,因为以前理解错误。。。以为每个Session都是独立的,现在发现,这个userid,只是记录最后一个登录的人的userid。。杯具呀。。。现在日志表很混乱,userID都不对的。。有什么简单的方法可以把这段代码改掉么?

我的架构只是简单的JSP+Servlet

请各位大大帮忙呀~~3Q。。。

------解决方案--------------------
探讨
我开始学习的时候写了一个类,这个类implements HttpSessionAttributeListener

然后在attributeAdded方法里面得到每个登录的Session,在Session里面得到userId

具体写法是:


Java code

int userid=0;
public void attributeAdded(HttpSessionBind……

------解决方案--------------------
你到底要干嘛啊?你自己定义一个ID又干嘛啊?
------解决方案--------------------
你在登录成功的时候把userId放入session里面了吗
------解决方案--------------------
userSession.setAttribute(user.getId(), user)
------解决方案--------------------
attributeAdded是用户登陆时调用的方法.每个用户登陆后都会覆盖你的userID,你要做日志根本不需要记录这个值,每次去session里面取就行了
------解决方案--------------------
探讨

引用:
attributeAdded是用户登陆时调用的方法.每个用户登陆后都会覆盖你的userID,你要做日志根本不需要记录这个值,每次去session里面取就行了


我知道每次去取就行了
问题是怎么取?

比如 insert操作

我在一个方法里面做insert,然后要插入日志,这个insert的方法是servlet跳转,servle……

------解决方案--------------------
这样,你会AOP么,如果会的话,做一个aop after通知,在某些service方法进行拦截,可以取到HttpServletRequest,然后再取userID
------解决方案--------------------
探讨
引用:
引用:

引用:
attributeAdded是用户登陆时调用的方法.每个用户登陆后都会覆盖你的userID,你要做日志根本不需要记录这个值,每次去session里面取就行了


我知道每次去取就行了
问题是怎么取?

比如 insert操作

我在一个方法里……

------解决方案--------------------
帮顶 .