struts2拦截器实现用户登录管理
ManagerInterceptor.java
package dsh.bikegis.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import dsh.bikegis.action.ManagerLoginAction;
/**
* 管理員登錄控制的攔截器
* @author NanGuoCan
*
*/
public class ManagerInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 5722672508679011124L;
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession(true);
String username = (String) session.getAttribute("userName");
ActionSupport action = (ActionSupport) invocation.getAction();
if (action instanceof ManagerLoginAction)
return invocation.invoke();
if (username != null && !username.equals(""))
return invocation.invoke();
else {
return "login";
}
}
}
ManagerLoginActionImpl.java
package dsh.bikegis.action.impl;
import com.opensymphony.xwork2.ActionSupport;
import dsh.bikegis.action.ManagerLoginAction;
import dsh.bikegis.model.User;
import dsh.bikegis.service.ManagerLoginService;
import dsh.bikegis.system.SysAction;
public class ManagerLoginActionImpl extends SysAction implements ManagerLoginAction {
/**
* 管理員登錄Action的實現部分
*/
private static final long serialVersionUID = 1L;
private User user;
private ManagerLoginService loginService;
private String errMesg;
/**
* 管理員登錄
*/
@Override
public String login() {
if(!(this.validateLogin()))
return ActionSupport.ERROR;
try {
if (this.loginService.login(user)) {// 登錄成功
request.getSession().setAttribute("userName",
user.getUsername());
request.getSession().setAttribute("id", user.getId());
if (user.getUsername().equals("manager")) {
request.getSession().setAttribute("ROLE", "manager");
}
return SUCCESS;
} else {
this.errMesg = "帳號或密码错误";
return ERROR;
}
} catch (Exception e) {
e.printStackTrace();
this.errMesg = "帳號或密码错误";
return ERROR;
}
}
/**
* 管理员登录 验证
* @return
* 驗證成功返回true,否則返回false
*/
@Override
public boolean validateLogin() {
if (user == null) {
this.errMesg ="未能取得用戶信息";
return false;
}
if (user.getUsername() == null || user.getUsername().equals("")) {
this.errMesg = "帳號不能為空";
return false;
}
if (user.getUserpsw() == null || user.getUserpsw().equals("")) {
this.errMesg = "密碼不能為空";
return false;
}
return true;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public ManagerLoginService getLoginService() {
return loginService;
}
public void setLoginService(ManagerLoginService loginService) {
this.loginService = loginService;
}
public String getErrMesg() {
return errMesg;
}
public void setErrMesg(String errMesg) {
this.errMesg = errMesg;
}
}
struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- 用戶操作類的Action --> <package name="adminmanage" namespace="/manage" extends="bikeGIS"> <interceptors> <!-- 是否登录 --> <interceptor name="adminLogin" class="dsh.bikegis.interceptor.ManagerInterceptor"></interceptor> <interceptor-stack name="adminmanageStack"> <interceptor-ref name="bikeGISstack"></interceptor-ref> <interceptor-ref name="adminLogin"></interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="adminmanageStack"></default-interceptor-ref> <global-results> <!-- 重新登錄 --> <result name="login" type="redirectAction"> <param name="actionName">index</param> <param name="namespace">/manage</param> </result> </global-results> <action name="index" class="loginAction"> <result>/manage/index.jsp</result> </action> <!-- 用戶登錄 --> <action name="loginAction" class="loginAction" method="login"> <result type="redirect">/manage/frame.action</result> <result name="error">/manage/index.jsp</result> <result name="input">/manage/index.jsp</result> </action> <!-- 用戶退出 --> <action name="loginOut" class="userAction" method="loginOut"> <result name="success">/manage/index.jsp</result> </action> <!-- 修改密碼 --> <action name="modifyPswAction" class="userAction" method="modifyUserPsw"> <result name="success" type="redirect" >/manage/main.action</result> <result name="error" >/manage/user/modifypsw.jsp</result> </action> </package> </struts>