package com.essp.uas.proxy;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;public abstract class ProxyFactory<T> implements InvocationHandler { private T target; public ProxyFactory(T target) {
super();
this.target = target;
} public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object o = null;
try {
before(args);
o = method.invoke(target,args);
after(method.getName(),args);
} catch (Exception e) {
onException(e);
e.printStackTrace();
}
return o;
} @SuppressWarnings("unchecked")
public T createProxy() {
Class<T> cls = (Class<T>) target.getClass();
if (cls.getInterfaces() != null)
return (T) Proxy.newProxyInstance(cls.getClassLoader(), cls
.getInterfaces(), this);
return target;
} public abstract void onException(Exception ex); public abstract void before(Object[] args); public abstract void after(String methodName,Object[] args);
}这是我的代码,我的想法是在before方法中判断session是否过期,如果过期想在页面上弹出一个alert提示框。after是用来记录操作日志的。
我想请教如果session失效,怎么在页面上弹出一个alert提示?
前台页面JS检测下,如果不为空就弹出alert,为空就不跳了
所以我放弃在代理中判断session然后跳转的思路。
现在我已经加入一个sessionfilter来过滤请求,如果session失效则在输出流中创建一个alert提示框,用户点击提示框后跳转到登录页面,本人觉得这种解决方式还不错,和大家分享下。package com.essp.uas.filter;import java.io.IOException;
import java.io.PrintWriter;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class SessionFilter implements Filter {
public void destroy() {
} public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
// 如果session不为空,则可以浏览其他页面
String url = request.getServletPath();
Object o = session.getAttribute("user");
System.out.println(url);
//在web.xml中,用url-pattern进行拦截映射
if (o == null || "".equals(o)) {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String s = request.getContextPath() + "/logout.action'";
out.println("<script language='javascript' type='text/javascript'>");
out.println("alert('由于你长时间没有操作,导致Session失效!请你重新登录!');window.top.location='" + s);
out.println("</script>");
} else {
chain.doFilter(req, res);
}
} public void init(FilterConfig config) throws ServletException {
}
}