本帖最后由 sunnxxy 于 2010-08-30 11:04:33 编辑

解决方案 »

  1.   

    这样写肯定不行的啊,只会出现最后一个的,把前面的都覆盖了做法:
    if(登录成功){
       把用户名作为编号把user存入sessin
       写法:session[userId],这样userid是不同的,那么session就不同了,要是相同就会记录最后一个.
    }因为不知道楼主具体是要干什么,只好先写这样的思路,楼主考验试试看
      

  2.   

    你在登录成功的时候把userId放入session里面了吗
      

  3.   

    不好意思,可能我没说清楚我登陆的时候写的东西如下:if(true){
    HttpSession userSession = request.getSession();
    userSession.setAttribute("user", user);
    }
    我想要实现,每个人做每一个动作的时候,比如增删改
    都调用上面那个类(implements HttpSessionAttributeListener)
    可以不用我每个动作都传UserId进来举例说明:
    比如A登陆了,在A登陆后,B又登陆了,然后A所做的操作都变成B的UserId了,我现在就是想A的UserID对应A所作的动作,B的userID对应B所做的操作,都在一个类里面实现,有没有这个可能?
    ⊙﹏⊙b汗不知道说清楚没请各位大大批评指教
      

  4.   

    userSession.setAttribute(user.getId(), user)
      

  5.   

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

  6.   


    我知道每次去取就行了
    问题是怎么取?比如 insert操作我在一个方法里面做insert,然后要插入日志,这个insert的方法是servlet跳转,servlet是可以得到session,但是我不想在每个servlet里面传userid。。该怎么做呢?
      

  7.   


    这个怎么取session????不知道UserID么
      

  8.   


    用不着这么复杂吧。登录成功的session.setAttribute("user",user);
    插入那里直接getAttribute然后取id插日志么好了。
      

  9.   

    我知道可以这样做,问题是,因为我以前犯的错误,如果现在要改每个Servlet会很复杂。。我就是不想去改每个Servlet想说有没有什么办法,在那个类里面直接判断是哪个UserID在做操作。。
      

  10.   

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

  11.   

    public void attributeAdded(HttpSessionBindingEvent arg0)
      {
        String name = arg0.getName();
        String value = "";
        ServletContext context = arg0.getSession().getServletContext();    if ("userId".equals(name)) {
          value = (String)arg0.getValue();      Set userIds = (Set)context.getAttribute("loginUsers");      if (userIds == null) {
            userIds = new HashSet();
            userIds.add(value);
          }
          else {
            userIds.add(value);
          }      context.setAttribute("loginUsers", userIds);
        }
      }