一、struts2 拦截登录
功能描述:登录进去的用户存在session中,若用户执行退出系统或者未登录系统,则无论访问哪个action或者页面,只能停在登录页面。
实现:
1.LoginInterceptor.java
public class LoginInterceptorimplements Interceptor
{
privateString exclude;
public void destroy()
{
// TODO Auto-generated method stub
}
public void init()
{
// TODO Auto-generated method stub
}
publicString intercept(ActionInvocation arg0) throws Exception
{
//若为登录的action则不拦截
String actionName =arg0.getProxy().getActionName();
// System.out.println("************actionName:"+ actionName);
if(exclude.equals(actionName))
{
return arg0.invoke();
}
ActionContext ac =arg0.getInvocationContext();
Map session = ac.getSession();
AdminInfoadmin = (AdminInfo) session.get("admins");
if(admin != null)
{
returnarg0.invoke();
}
else
{
return"error";
}
}
public String getExclude()
{
return exclude;
}
publicvoid setExclude(String exclude)
{
this.exclude = exclude;
}
}
2.struts.xml
二、“退出系统”代码:
1. LoginAction.java
//退出系统
public String exit()
{
HttpServletRequestrequest = ServletActionContext.getRequest();
HttpSessionsession = request.getSession();
session.removeAttribute("admins");
session.invalidate();
return "exit";
}
2.此处略去 struts.xml 中的配置(返回到 login.jsp)
三、session方法
1.HttpSession session =request.getSession();
request.getSession()的括号中是有参数的,若不写参数,则默认为 true,表示当前 request中若无session,则创建一个新的 session 。若为 request.getSession(false) , 则返回 null。
需要注意的是,除非我们确认该 request 中存在 session(即session 中存了值)或者确实需要创建一个新的 session 时,使用 request.getSession(),其他的尽量使用 request.getSession(false) 。
2.session.removeAttribute("admins"); //清除session
session.invalidate(); //注销 session