java类:
package com.secoo.stocks.util;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class StrutsInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = 1L;
@Override
public String intercept(ActionInvocation invocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
StringBuffer strb = new StringBuffer( invocation.getAction().getClass().getName() );
strb.append(".").append(invocation.getProxy().getMethod() );
//不拦截的方法允许通过不拦截
if( HttpUtil.relativeValue("/auth_service.properties", "STOCK_NAMES").contains(strb.toString()) ){
return invocation.invoke();
}else{
Object object = request.getSession().getAttribute("stockId");
if(object != null){
return invocation.invoke();
}else{
//地址重定向
response.sendRedirect(request.getContextPath()+"/index.jsp");
//RequestDispatcher view=request.getRequestDispatcher("/index.jsp");
//view.forward(request, response);
}
}
return null;
}
}
struts-stack.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="secoo-default" extends="struts-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="secooStack" class="com.secoo.stocks.util.StrutsInterceptor"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="secooInterceptorStack">
<!-- 自定义拦截器 -->
<interceptor-ref name="secooStack"/>
<!-- 系统默认拦截器(必写) -->
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 这句是设置所有Action自动调用的拦截器栈:重定义默认拦截器栈 -->
<default-interceptor-ref name="secooInterceptorStack"/>
<!-- 定义全局处理结果 -->
<global-results>
<result name="error">/index.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="Exception"></exception-mapping>
</global-exception-mappings>
</package>
</struts>
struts.xml需要配置:(如果将拦截器放在struts.xml中,就不需要了)
<include file="auth-struts.xml"></include>
//继承 struts-stack.xml <package name="struts-action" extends="secoo-default">
<interceptors>
<!-- 定义拦截器 -->
<interceptor name="拦截器名" class="拦截器实现类"/>
<!-- 定义拦截器栈 -->
<interceptor-stack name="拦截器栈名">
<interceptor-ref name="拦截器一"/>
<interceptor-ref name="拦截器二"/>
</interceptor-stack>
</interceptors>