1、定义拦截器,继承MethodFilterInterceptor
package com.life.stuts.interceptor;import java.util.Map;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;/*** 如果不是login的adction,使用自定义拦截器判断用户是否为空。为空,跳转到登陆页面;否则,继续执行。* 在配置拦截器属性excludeMethods、includeMethods进行方法过滤时发现不起作用。* 要想使方法过滤配置起作用,拦截器需要继承MethodFilterInterceptor类。* MethodFilterInterceptor类是AbstractInterceptor的子类* @author JL* */public class SellerInterceptor extends MethodFilterInterceptor {/*** */private static final long serialVersionUID = 1L;@Overrideprotected String doIntercept(ActionInvocation invocation) throws Exception {// TODO Auto-generated method stubMap<String, Object> sessionValues = invocation.getInvocationContext().getSession();String seller = (String) sessionValues.get("seller");// 如果没有管理员登陆或商家登陆,就返回到登陆页面,否则继续访问原actionSystem.out.println("action拦截器");if (seller == null) {return "loginscript";}return invocation.invoke();}}
2、struts.xml的配置,希望对那个action进行拦截就把interceptor 放里面,要加上defaultStack。
<interceptors><interceptor name="authentication"class="com.life.stuts.interceptor.AuthenticationInterceptor"></interceptor></interceptors><global-results><result name="login">/</result></global-results><action name="*_manage" method="{1}" class="ManageAction"><!-- param是K-V形式,在action的类文件中调用,前提是类中有这样一个变量,并且提供get-set方法 --><interceptor-ref name="authentication"></interceptor-ref><!-- 在配置了其它拦截器之后,必须加上defaultStack,否则jsp无法向action传值 ,且文件上传也失效 --><interceptor-ref name="defaultStack"></interceptor-ref></action>
3、实现对action的某些方法不拦截
excludeMethods表示不进行拦截
includeMethods表示要拦截
<interceptor-ref name="sellerauthentication"><param name="includeMethods"></param><param name="excludeMethods">login,logout</param></interceptor-ref>
Done
如果觉得《Struts2的拦截器只允许有权限用户访问action》对你有帮助,请点赞、收藏,并留下你的观点哦!