现在只是为将来总结提示一下,以后再将运行流程详细解说并将源码添加到附件上,同时加深自己对 Struts 运行机制。
Architects Guide
Figure 1 Struts 2 Framework's Architecture
AuthorityFilter.java
package com.tucue.interceptor;
import java.io.IOException;
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;
/**
* 文件名称:AuthorityFilter.java
*
* 版权信息:TD 实验室
*
* 创建日期:2010-6-24
*
* 修改历史:
*/
/*
* 类的功能描述:登录权限过滤器
*
* 作者:Li Huagang
*/
public class AuthorityFilter implements Filter {
// @see javax.servlet.Filter#destroy()
@Override
public void destroy() {
}
// @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String uri = request.getRequestURI();
// 过滤所有的 *.jsp 请求
if (uri.contains("jsp") || uri.contains("html") || uri.contains("htm")) {
HttpSession session = request.getSession();
if (session.getAttribute(AuthorityInterceptor.LOGINED_FLAG) == null) {
response.sendRedirect(request.getContextPath() + "/admin/jumpLoginPage.action");
return ;
}
}
chain.doFilter(req, res);
return ;
}
// @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
@Override
public void init(FilterConfig paramConfig) throws ServletException {
}
}
AuthorityInterceptor.java
package com.tucue.interceptor;
import static com.opensymphony.xwork2.Action.ERROR;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 文件名称:AuthorityInterceptor.java
*
* 版权信息:TD 实验室
*
* 创建日期:2010-4-22
*
* 修改历史:
*/
/*
* 类的功能描述:登录权限拦截器
*
* 作者:Li Huagang
*/
public class AuthorityInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1770471187955003755L;
public static String LOGINED_FLAG = "logined"; // 判断用户是否已登录
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletResponse response = ServletActionContext.getResponse();
response.setContentType("text/html;charset=UTF-8");
Map<?,?> session = invocation.getInvocationContext().getSession();
Object logined = session.get(AuthorityInterceptor.LOGINED_FLAG);
if (logined == null) {
return ERROR;
} else {
return invocation.invoke();
}
}
}