public String logout(){
ServletActionContext.getSession().invalidate();
return "login";
}重定向到登陆页面,这中间会经过一个登陆验证过滤器,此时session.getAttribute()时抛出IllegalStateException.
网上有人说不要用invalidate而用session.removeAttribute(),但是我这里必须要保证退出时销毁当前session。
照例说invalidate之后再getSession已经是获取新的session了。这在Action里做没问题,但是在过滤器中执行就报错了。
if (session.isNew()) { //session无效,在这里进行页面跳转,返回到登录页面 }
session.invalidate();
response.sendRedirect(request.getContextPath()+"/login.action");
return null;
}这样就不会报错了,貌似如果return一个结果后,通过Struts2自身的过滤器会报错。
也可以返回一个"logout"字符串 根据返回的字符串跳转到登录页面
<result name="logout">/login.jsp</result>