用struts拦截器实现登录验证功能AuthorizationInterceptor

前段时间在项目中曾经用Struts的拦截器实现登录验证功能,AuthorizationInterceptor.java,现在分享下,哈

 

package com.interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.*;
import com.opensymphony.xwork2.*;
import java.util.*;
/**
 * 
@author http://www.cnblogs.com/jobscn/
 
*/
public class AuthorizationInterceptor extends AbstractInterceptor {
    private String ignoreActions;

    // ignoreActions属性的getter方法
    public String getIgnoreActios() {
        return ignoreActions;
    }

    // ignoreActions属性的setter方法
    public void setIgnoreActions(String ignoreActions) {
        this.ignoreActions = ignoreActions;
    }

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext ctx = invocation.getInvocationContext();

        Map session = ctx.getSession();
        String user = (String) session.get("username");

        boolean ignore = false;
        String currentAction = invocation.getProxy().getActionName();
        String[] actions = ignoreActions.split(",");

        for (String action : actions) {
            if (currentAction.matches(action.trim())) {
                ignore = true;
                break;
            }
        }

        if (user != null || ignore == true) {

            return invocation.invoke();
        } else {
            return Action.LOGIN;
        }

    }
}
在struts.xml文件里面配置该拦截器:
  <interceptors> 
      <interceptor name="authorization" class="com.interceptor.AuthorizationInterceptor" /> 
      <interceptor-stack name="myStack"> 
          <interceptor-ref name="authorization"> 
              <param name="ignoreActions"> validate_code,register.*,.*login.*,upload,connector</param> 
          </interceptor-ref> <interceptor-ref name="defaultStack" />
  </interceptor-stack> 
 </interceptors> 
  <default-interceptor-ref name="myStack"/>
posted @ 2011-11-06 20:51  chenchun  阅读(1929)  评论(0编辑  收藏  举报