📄 checklogininterceptor.java.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 + -