[转帖]   struts2登陆拦截器_Tomcat, WebLogic及J2EE讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Tomcat, WebLogic及J2EE讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2630 | 回复: 0   主题: [转帖]   struts2登陆拦截器        下一篇 
    本主题由 koei 于 2014-5-2 16:07:36 移动
funny
注册用户
等级:中校
经验:1529
发帖:111
精华:4
注册:2013-3-13
状态:离线
发送短消息息给funny 加好友    发送短消息息给funny 发消息
发表于: IP:您无权察看 2013-3-19 17:47:45 | [全部帖] [楼主帖] 楼主

1、拦截器代码如下: 

package ssh.security;
import java.util.Map;
import model.login.LoginVo;
import org.apache.log4j.Logger;
import ssh.web.action.LoginPerson;
import ssh.web.action.login.LoginAction;
import ssh.web.action.logout.LogoutAction;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
@SuppressWarnings(serial)
public class LoginInterceptor implements Interceptor {
      public static final String LOGIN_PAGE = login;
      //public static Student student;
      public static LoginVo loginVo;
      /** 

* 初始化日志引擎 

*/
      private final Logger logger = Logger.getLogger(s2shLogger);
      public void destroy() {
      }
      public void init() {
      }
      @SuppressWarnings(unchecked)
      public String intercept(ActionInvocation actionInvocation) throws Exception {
            Object action = actionInvocation.getAction();
            logger.info(LoginInterceptor.class + 拦截到的action为:+action);
            // 对LoginAction不做该项拦截 LoginPerson 
            if (action instanceof LoginPerson || action instanceof LoginAction) {
                  System.out.println(exit check login, because this is login action.);
                  return actionInvocation.invoke();
            }
            if(action instanceof LogoutAction){
                  System.out.println(exit check logout, because this is logout action.);
                  return actionInvocation.invoke();
            }
            // 确认Session中是否存在Student 
            Map session = actionInvocation.getInvocationContext().getSession();
            if(session !=null){
                  loginVo = (LoginVo) session.get(seStudent);
                  if (loginVo != null ) {
                        // 存在的情况下进行后续操作。 
                        System.out.println(already login!+action.toString());
                        return actionInvocation.invoke();
                  } else {
                  // 否则终止后续操作,返回LOGIN 
                  System.out.println(no login, forward login page!);
                  ActionContext.getContext().put(info, 请先登录系统后再进行操作);
                  return LOGIN_PAGE;
            }
      }else {
      // 否则终止后续操作,返回LOGIN 
      System.out.println(no login, forward login page!);
      ActionContext.getContext().put(info, 请先登录系统后再进行操作);
      logger.warn(非法账号登录);
      return LOGIN_PAGE;
}
}
}


2.struts配置文件中,有关拦截器的配置内容如下: 

<?xml version=1.0 encoding=UTF-8?>
<!DOCTYPE struts PUBLIC
-//Apache Software Foundation//DTD Struts Configuration 2.0//EN
http://struts.apache.org/dtds/struts-2.0.dtd>
<struts>
<constant name=struts.devMode value=true />
<constant name=struts.objectFactory value=spring></constant>
<constant name=struts.i18n.encoding value=utf-8/>
<include file=/actions/struts_student.xml></include>
<include file=/actions/struts_login.xml></include>
<include file=/actions/struts_page.xml></include>
<include file=/actions/struts_ajax.xml></include>
<package name=struts-comm extends=struts-default>
<!-- 拦截器配置 -->
<interceptors>
<interceptor name=loginInterceptor class=ssh.security.LoginInterceptor></interceptor>
<interceptor-stack name=teamwareStack>
<interceptor-ref name=loginInterceptor/>
<interceptor-ref name=defaultStack/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name=teamwareStack/>
<global-results>
<result name=login>/main/webapp/pub/index.jsp</result>
</global-results>
</package>
</struts>


3.接受登录请求的Action设置session信息的代码片段: 

package ssh.web.action.login;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import model.login.LoginVo;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import ssh.comm.util.Tools;
import ssh.service.login.LoginFacade;
import ssh.web.action.LoginPerson;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings(serial)
public class LoginAction extends ActionSupport {
private String account;
private String password;
private String verifyCode;
private LoginFacade loginFacade;
private LoginVo loginVo;
private final Logger logger = Logger.getLogger(LoginPerson.class);
@SuppressWarnings(deprecation)
@Override
public String execute() throws Exception {


logger.info(LoginAction.class + [method:login() 登录账号验证] in ...); 

HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
/** 

* 验证码校验 

* */
String icp = (String) session.getAttribute(piccode);
if (icp==null && !Tools.isEmpty(verifyCode)){
      icp = verifyCode;
}
if(Tools.isEmpty(verifyCode)|| !icp.equalsIgnoreCase(verifyCode)){
      request.setAttribute(errMessage,验证码错误,请重新输入);
      return LOGIN;
}
if (!Tools.isEmpty(icp) && !Tools.isEmpty(verifyCode)) {
      if (!verifyCode.equalsIgnoreCase(icp)) {
            request.setAttribute(errMessage,验证码错误,请重新输入);
            return LOGIN;
      }
}
/** 

* 获取当前登录对象 

* 用于判断系统是否已登录 

* */
loginVo = this.loginFacade.login(account, password);
if(loginVo != null ){
      session.setAttribute(seStudent, loginVo);
      return SUCCESS;
}else{
request.setAttribute(err, 用户名或密码错误,请重新输入后登陆);
return LOGIN;
}
}
public String getAccount() {
      return account;
}
public void setAccount(String account) {
      this.account = account;
}
public String getPassword() {
      return password;
}
public void setPassword(String password) {
      this.password = password;
}
public String getVerifyCode() {
      return verifyCode;
}
public void setVerifyCode(String verifyCode) {
      this.verifyCode = verifyCode;
}
public LoginFacade getLoginFacade() {
      return loginFacade;
}
public void setLoginFacade(LoginFacade loginFacade) {
      this.loginFacade = loginFacade;
}
public LoginVo getLoginVo() {
      return loginVo;
}
public void setLoginVo(LoginVo loginVo) {
      this.loginVo = loginVo;
}


该贴由koei转至本版2014-5-2 16:07:36



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论