请教关于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。。。
------解决方案--------------------
------解决方案--------------------你到底要干嘛啊?你自己定义一个ID又干嘛啊?
------解决方案--------------------你在登录成功的时候把userId放入session里面了吗
------解决方案--------------------userSession.setAttribute(user.getId(), user)
------解决方案--------------------attributeAdded是用户登陆时调用的方法.每个用户登陆后都会覆盖你的userID,你要做日志根本不需要记录这个值,每次去session里面取就行了
------解决方案--------------------
------解决方案--------------------这样,你会AOP么,如果会的话,做一个aop after通知,在某些service方法进行拦截,可以取到HttpServletRequest,然后再取userID
------解决方案--------------------
------解决方案--------------------帮顶 .