在struts2中配置自定义拦截器放行多个方法
2017-07-27 23:46
573 查看
在struts2中配置自定义拦截器放行多个方法
配置struts2 拦截器属性excludeMethods、includeMethods进行方法过滤时发现不起作用。
要想使方法过滤配置起作用,拦截器需要继承MethodFilterInterceptor类。
MethodFilterInterceptor类是AbstractInterceptor的子类
源码:
自定义的拦截器类:
//自定义拦截器类:LoginInterceptor ;
package com.java.action.interceptor;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -5315714306081057062L;
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//Logger log = LoggerFactory.getLogger(getClass());
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("boperator");
if(null != obj ){
return invocation.invoke();
}else{
//log.debug("Skipping Interceptor... Method [" + doIntercept(null) + "] found in exclude list.");
return null;
}
}
}
在struts2.xml中配置:
<!-- package标签下 -->
<package name="helloactionpkg" extends="struts-default" namespace="/">
<!-- 自定义 拦截器 -->
<interceptors>
<interceptor name="login" class="com.java.action.interceptor.LoginInterceptor"></interceptor>
</interceptors>
<!-- package标签内容 标签尾 -->
<!-- action标签下 -->
<action name="hello_*" class="com.java.action.UserAction" method="{1}" >
<!-- 配置拦截器 -->
<interceptor-ref name="login">
<!-- param 标签下 name="excludeMethods" 放行多个方法 方法名1,方法名2 用逗号隔开即可 -->
<param name="excludeMethods">toLogin,login</param>
</interceptor-ref>
<!-- 由于使用了自定义拦截器,应再次加载使用框架默认拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- action标签内容 标签尾 -->
原因--源码(部分):
protected Set<String> excludeMethods = Collections.emptySet();
protected Set<String> includeMethods = Collections.emptySet();
public void setExcludeMethods(String excludeMethods) {
this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods);
}
public static Set<String> commaDelimitedStringToSet(String s) {
Set<String> set = new HashSet<String>();
String[] split = s.split(",");
for (String aSplit : split) {
String trimmed = aSplit.trim();
if (trimmed.length() > 0)
set.add(trimmed);
}
return set;
}
配置struts2 拦截器属性excludeMethods、includeMethods进行方法过滤时发现不起作用。
要想使方法过滤配置起作用,拦截器需要继承MethodFilterInterceptor类。
MethodFilterInterceptor类是AbstractInterceptor的子类
源码:
自定义的拦截器类:
//自定义拦截器类:LoginInterceptor ;
package com.java.action.interceptor;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
public class LoginInterceptor extends MethodFilterInterceptor {
private static final long serialVersionUID = -5315714306081057062L;
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
//Logger log = LoggerFactory.getLogger(getClass());
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("boperator");
if(null != obj ){
return invocation.invoke();
}else{
//log.debug("Skipping Interceptor... Method [" + doIntercept(null) + "] found in exclude list.");
return null;
}
}
}
在struts2.xml中配置:
<!-- package标签下 -->
<package name="helloactionpkg" extends="struts-default" namespace="/">
<!-- 自定义 拦截器 -->
<interceptors>
<interceptor name="login" class="com.java.action.interceptor.LoginInterceptor"></interceptor>
</interceptors>
<!-- package标签内容 标签尾 -->
<!-- action标签下 -->
<action name="hello_*" class="com.java.action.UserAction" method="{1}" >
<!-- 配置拦截器 -->
<interceptor-ref name="login">
<!-- param 标签下 name="excludeMethods" 放行多个方法 方法名1,方法名2 用逗号隔开即可 -->
<param name="excludeMethods">toLogin,login</param>
</interceptor-ref>
<!-- 由于使用了自定义拦截器,应再次加载使用框架默认拦截器 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- action标签内容 标签尾 -->
原因--源码(部分):
protected Set<String> excludeMethods = Collections.emptySet();
protected Set<String> includeMethods = Collections.emptySet();
public void setExcludeMethods(String excludeMethods) {
this.excludeMethods = TextParseUtil.commaDelimitedStringToSet(excludeMethods);
}
public static Set<String> commaDelimitedStringToSet(String s) {
Set<String> set = new HashSet<String>();
String[] split = s.split(",");
for (String aSplit : split) {
String trimmed = aSplit.trim();
if (trimmed.length() > 0)
set.add(trimmed);
}
return set;
}
相关文章推荐
- struts2拦截器-自定义拦截器,放行某些方法(web.xml配置)
- struts2中自定义拦截器intercept的相关配置及使用方法
- struts2自定义拦截器注解配置方法
- 继承方法拦截器的自定义拦截器配置
- Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法
- Struts2 自定义拦截器(方法拦截器)
- struts2配置自定义拦截器
- 如何配置自定义struts2拦截器
- Struts2 自定义拦截器(方法拦截器)
- Struts2 自定义拦截器(方法拦截器)
- Struts2 自定义拦截器(方法拦截器)
- Struts2拦截器属性excludeMethods、includeMethods配置无效之解决方法
- struts2拦截器interceptor的三种配置方法
- Struts2中配置全局拦截器的方法
- struts2自定义拦截器和方法拦截器
- struts2 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用
- struts2的自定义拦截器和配置
- Struts2 自定义拦截器(方法拦截器)
- Struts2 自定义拦截器配置和使用
- struts2拦截器的三种配置方法