public String logout(){
getSession().remove(currentUser());
ServletActionContext.getRequest().getSession().invalidate();
return "log_out";
}
当用户登陆后把登陆对象放到了session中,当用户点击注销时!到达登陆页面!
但是!用户安全的注销后,到达登陆页面只要按一下backspace时又会回到管理页面!
还可以做操作!只是没有这个对象了报了一个java.lang.NullPointerException!
我使用是struts2!

解决方案 »

  1.   

    你在管理页面从session中取出currentUser()后没有做判空处理,自然未登录而直接进入管理页面要报空对象异常。从业务上看,你在管理页面默认了用户肯定是从登录页面进来的,而没有处理“用户不是从登录页面进来,比如说直接输入管理页面的URL地址”的情况,所以就出问题了。
      

  2.   

    你得把session 给销毁掉。
    。 而不是简单把里面的认证删除就可以了的
      

  3.   


    可能是current()为null
    你注销的时候,就删除当前用户的key,如用户的id或name
    你是怎么设置session就是怎么删除的
    session.setAttribute("user", User);
    session.removeAttribute("user")
      

  4.   

    你登录的时候可能是
    User user=hibernate.load(User.class,login_id);
    session.setAttribute("login_user",user);但currentUser()返回的应该是User吧
    所以你应该
    session.remove(currentUser().getId());
      

  5.   


    不对哦
    你session.invalidate()了。。session应该没了吧。
      

  6.   

    与注销无关吧,应该起效了(NullPointerException说明了)。你的管理界面应该加一个过滤,如果发现session中你存的内容为null,说明是非法登录,给他踢回到登陆界面。1楼说的就是这个道理。
      

  7.   

    可以進行其他操作的原因是你沒用過濾器嘛。
    報NULL異常是因為你去session裡面的用戶信息的值時  session被釋放了  所以取出來是NULL
      

  8.   

    1.用filter .
    2.用interceptor 
    <package name="basePackage" extends="struts-default" abstract="true">
    <interceptors>
    <!-- 用户登录 -->
    <interceptor name="userInterceptor" class="xxxx.SysUserInterceptor"/>
                    </interceptors>将必须登录后才能操作的 package继承basePackage, 问题解决