java里的拦截器是动态拦截Action调用的对象。它运行在action对象创建之后,action的方法使用之前执行。在action方法执行之前执行拦截器,执行过程使用aop思想。执行多个拦截器时使用责任链设计模式。
自定义拦截器代码
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class PrivilegeInterceptor extends MethodFilterInterceptor{
@Override
protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
// 判断是否登录,如果登录,放行,没有登录,跳转到登录页面.
AdminUser adminUser = (AdminUser) ServletActionContext.getRequest()
.getSession().getAttribute("existAdminUser");
if(adminUser != null){
// 已经登录过
return actionInvocation.invoke();
}else{
// 跳转到登录页面:
ActionSupport support = (ActionSupport) actionInvocation.getAction();
support.addActionError("您还没有登录!没有权限访问!");
return ActionSupport.LOGIN;
}
}
}
struts.xml中配置
<package name="xx" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="自定义拦截器名字" class="自定义拦截器全路径"></interceptor>
</interceptors>
<!-- 在要使用拦截器的action中配置 -->
<action name="adminUser_*" class="action全路径或spring中配置的名字" method="{1}">
<result name="XXXXX">/XXX/XX.jsp</result>
<interceptor-ref name="自定义拦截器名字"></interceptor-ref>
<!-- 默认拦截器还要使用 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>