⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checklogininterceptor.java.svn-base

📁 struts2结合ext参数传递
💻 SVN-BASE
字号:
package com.ufida.struts2.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.Timestamp;
import java.util.Map;

import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.apache.commons.lang.StringUtils;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import com.ufida.struts2.sample.Ignore;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.ufida.struts2.sample.Bind;
import com.ufida.struts2.sample.LoginAction;
import com.sitechasia.webx.core.utils.populator.ConverterFactory;
import com.sitechasia.webx.core.utils.populator.PopulatorFactory;

public class CheckLoginInterceptor extends AbstractInterceptor {

	private static final long serialVersionUID = -1961164142812444536L;

	public static final String LOGIN_KEY = "user";

	public static final String LOGIN_PAGE = "global.login";

	public String intercept(ActionInvocation actionInvocation) throws Exception {

		System.out.println("begin check login interceptor!");

		// 对LoginAction不做该项拦截

		Object action = actionInvocation.getAction();

		if (action instanceof LoginAction) {

			System.out
					.println("exit check login, because this is login action.");

			return actionInvocation.invoke();

		}

		// 确认Session中是否存在LOGIN

		Map session = actionInvocation.getInvocationContext().getSession();

		String login = (String) session.get(LOGIN_KEY);

		if (login != null && login.length() > 0) {

			// 存在的情况下进行后续操作。

			System.out.println("already login!");

			// System.out.println(actionInvocation.getAction());
			//
			// System.out.println(actionInvocation.getResultCode());
			//
			Map a = actionInvocation.getInvocationContext().getParameters();
			//
			// System.out.println(actionInvocation.getInvocationContext().getName());
			//
			// System.out.println(actionInvocation.getProxy().getMethod());
			
			// System.out.println(actionInvocation.getProxy().getMethod());
			if (!a.isEmpty()) {

				// @SuppressWarnings("unused")
				// Method method =
				// actionInvocation.getProxy().getAction().getClass().getMethod("save");
				//				
				// method.invoke("save", )
				//				
				Method[] aa = actionInvocation.getAction().getClass().getMethods();
				Method amethod[] = aa;
				Method m = null;
				int p = 0;
				for (int j = amethod.length; p < j; p++) {
					Method tempMethod = amethod[p];
					if (Modifier.PUBLIC != tempMethod.getModifiers()
							|| !tempMethod.getName().equals("save"))
						continue;					
					m = tempMethod;
					break;
					
				}				
				
				try {
					Object result = excu(m,actionInvocation);
				} catch (Exception e) {
					e.printStackTrace();					
				}
               
			}
			
             if(!actionInvocation.getProxy().getMethod().equals("save")){
            	return  actionInvocation.invoke();
             }
			 return null;
			
//			return null;

		} else {

			// 否则终止后续操作,返回LOGIN

			System.out.println("no login, forward login page!");

			return Action.LOGIN;

		}
	
	

	}
	
	private Object excu(Method m,ActionInvocation actionInvocation) throws Exception {
		Class type[] = m.getParameterTypes();
		if (m.getAnnotation(Ignore.class) != null) {
//			System.out.println(method.getAnnotation(Ignore.class).value());
			RequestContext.get().setIgnoreProperties(m.getAnnotation(Ignore.class).value());
		}
		java.lang.annotation.Annotation annotationArray[][] = m
				.getParameterAnnotations();
		Object paramTarget[] = new Object[type.length];
		for (int i = 0; i < type.length; i++) {
			Class typeClasz = type[i];
			if (ServletRequest.class.isAssignableFrom(typeClasz)) {
				paramTarget[i] = RequestContext.get().getRequest();
			} else if (ServletResponse.class.isAssignableFrom(typeClasz)) {
				paramTarget[i] = RequestContext.get().getResponse();
			} else if (MultipartFile.class.isAssignableFrom(typeClasz)) {
				java.lang.annotation.Annotation annotation[] = annotationArray[i];
				String fileName = ((Bind) annotation[0]).key();
				paramTarget[i] = ((MultipartHttpServletRequest) RequestContext
						.get().getRequest()).getFile(fileName);
			} else {
				java.lang.annotation.Annotation annotation[] = annotationArray[i];
				paramTarget[i] = getParameter(typeClasz,annotation.length == 0 ? null : (Bind) annotation[0]);
			}
		}
	
		return m.invoke(actionInvocation.getAction(), paramTarget);
	}
	

	/**
	 * 从request中获取参数,并转换成目标类型
	 * 
	 * @param type
	 *            目标类型
	 * @param bind
	 *            参数信息
	 * @return
	 */
	private Object getParameter(Class type, Bind bind) {
		if (bind == null || StringUtils.isBlank(bind.key())) {
			Object obj = null;
			try {
				obj = type.newInstance();
			} catch (InstantiationException e) {

				return null;
			} catch (IllegalAccessException e) {

				return null;
			}
			PopulatorFactory.getDefaultPopulator().populate(
					RequestContext.get().getRequest(), obj, null, null);
			return obj;
		}

		Object value = null;
		String key = bind.key();
		String defaultValue = bind.defaultValue();
		String params[] =  (String[]) ActionContext.getContext().getParameters().get(key);
		if (params == null) {
			if (defaultValue != null)
				params = new String[1];
			else
				params = new String[0];
		}
		if (params.length == 0) {
			if (type.isArray()) {
				value = params;
			} else if (defaultValue != null)
				value = defaultValue;
		} else if (params.length == 1) {
			if (type.isArray())
				value = refillParameters(params, defaultValue);
			else
				value = refillParameters(params, defaultValue)[0];
		} else if (type.isArray()) {
			value = refillParameters(params, defaultValue);
		} else if (defaultValue != null) {
			value = defaultValue;
		} else {
			value = params[0] != null && params[0].length() != 0 ? ((Object) (params[0]))
					: null;
		}

		if (type == Timestamp.class) {
			return ConverterFactory.getDefaultConverter().convertValue(Long.parseLong((String) value), type);
		} else {
			return ConverterFactory.getDefaultConverter().convertValue(value,type);
		}
	}

	private String[] refillParameters(String params[], String defaultValue) {
		if (params == null)
			return null;
		boolean useDefaultValue = defaultValue != null;
		for (int i = 0; i < params.length; i++)
			if (params[i] == null || params[i].length() == 0) {
				params[i] = null;
				if (useDefaultValue)
					params[i] = defaultValue;
			}

		return params;
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -