自定义特定action不被拦截的拦截器
1.在页面请求一个不被拦截的action
</head>
<%
long t=new Date().getTime();
%>
<body>
<img id="verifyCodeImg" src="<%=path%>/common/action/CommonAction/generateRandomCode.action?t=<%=t%>"/>
2.在spring配置中定义拦截处理的bean:
<bean id="role2VerifyInterceptor" class="interceptor.Role2VerifyInterceptor"></bean>
3.在struts2配置中,自定义不被拦截的action拦截器:
<package name="selfDefine-default" extends="struts-default">
<interceptors>
<interceptor name="role2VerifyInterceptor" class="role2VerifyInterceptor">
<!-- 拦截器不拦截的action后缀 -->
<param name="passActionSuffix">
/common/action/CommonAction/generateRandomCode.action
</param>
</interceptor>
<interceptor-stack name="WenxStack">
<interceptor-ref name="role2VerifyInterceptor"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="WenxStack"/>
</package>
4.在struts2配置不被拦截action的业务逻辑分发时,引用上面的自定义的拦截器;
<package name="common" namespace="/common" extends="selfDefine-default">
<action name="generateRandomCode" class="commonAction" method="generateRandomCode">
</action>
</package>
5.在Role2VerifyInterceptor实现struts2拦截器中AbstractInterceptor的intercept方法
public class Role2VerifyInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String url = request.getRequestURI();
//不拦截的
if(!checkNeedInterceptor(url)){
return actionInvocation.invoke();
}else{
return "";
}
}
/**
* 判断当前url和配置url是否不匹配
* @param url
* @return 不匹配true 匹配 false
*/
private boolean checkNeedInterceptor(String url){
if(null==passActionSuffix||"".equals(passActionSuffix)){
return true;
}else{
if(passActionSuffixes.length==0){
passActionSuffixes = passActionSuffix.replaceAll("\\s","").split(",");
}
for(String passAction:passActionSuffixes){
if(url.endsWith(passAction)){
return false;
}
}
}
return true;
}
private String passActionSuffix;
public String getPassActionSuffix() {
return passActionSuffix;
}
public void setPassActionSuffix(String passActionSuffix) {
this.passActionSuffix = passActionSuffix;
}
}
小结:
1.页面请求不被拦截的action;
2.在struts2的自定义拦截器,即不被拦截action的拦截器;
3.在struts2配置不被拦截action的业务逻辑分发时,引用上面的自定义的拦截器
4.在spring中定义bean,即处理过滤不被拦截action的bean;
5.在java bean中处理过滤不被拦截的action