引入拦截器最好的好处就是,实现了对action通过操作的可插拔管理,这样的可插拔管理基于struts.xml文件来配置实现。
下面看看,到底怎么来配置拦截器的呢。
<interceptors> <!-- 基本拦截器的配置--!> <interceptor name = "alias" class = "com.opensymphony.xwork2.interceptor.AliasInterceptor" /> <interceptor name = "autowiring" class = "com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor" /> </interceptor> </interceptors>
在struts中,内置的拦截器其实已经能够完成大部分的拦截任务,为了学习,下面我们看下自定义的拦截器要怎么使用:要自定义拦截器类,必须直接或间接实现Interceptor接口:
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation) throws Exception;
}
public class LoginInterceptor extends AbstractInterceptor{
private static final long serialVersionUID = -5325530121178579784L;
public String intercept(ActionInvocation ai) throws Exception {
Map session = ai.getInvocationContext().getSession();
String username = (String)session.get("user");
if(username != null && username.length() > 0){
return ai.invoke();
}else{
ActionContext ac = ai.getInvocationContext();
ac.put("abc", "未登录");
return Action.INPUT;
}
}
}
只要再像上面配置文件一样配置下action, 那么就可以使用登录拦截器了。