struts2拦截器值拦截器的方法过滤

来源:互联网 发布:qq语音软件下载 编辑:程序博客网 时间:2024/05/23 15:39

以前我们写的拦截器继承AbstractInterceptor类,可能会拦截整个Action中的所有方法而无法控制。而在实际开发中,很多时候我们只希望那个拦截器拦截某一个或者某几个请求,这样就导致了有些方法本来不用拦截,而拦截器将其拦截造成麻烦。所以这里编写自定义拦截器时就可以继承MethodFilterInterceptor类,这样就可以选择某些方法进行拦截,而不会拦截一个Action里面所有的方法。使编程更加灵活。

在struts2中提供了一个com.opensymphony.xwork2.interceptor.MethodFilterInterceptor抽象类,该类继承ActionInvocation类,并重写了intercept()方法,同时还提供了doIntercept()抽象方法。

MethodFilterInterceptor中提供了两个方法:
      public void setExcludeMethods(String excludeMethods):设置不需要过滤的方法,所有在excludeMethods字符串列出的方法都不会被拦截。
      public void setIncludeMethods(String includeMethods) :设置需要过滤的方法,
所有在includeMethods字符串列出的方法都不会被拦截。
     注意:如果一个方法的名称同时出现在以上两种方法中,则此方法会被拦截。

示例代码:
示例说明:访问web首页时显示一个超链接,点击可进入用户中心,但是在进入用户中心之前会被拦截器拦截判断用户是否登录,如果没有登录,拦截到登录界面,如果已经登录,进入用户中心。


首页index.jsp:

<a href="LoginAction!see.action">点击进入用户中心</a>
拦截器:SeeInterceptor.java:

 package com.web.interceptor;import java.util.Map;import com.opensymphony.xwork2.Action;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;//检测用户查看资源时是否登录的拦截器//继承MethodFilterInterceptor可以选择某些方法进行拦截@SuppressWarnings("serial")public class SeeInterceptor extends MethodFilterInterceptor {    protected String doIntercept(ActionInvocation arg0) throws Exception {        System.out.println("进来拦截器没");        //获取session        Map<String, Object> session=arg0.getInvocationContext().getSession();        //获取session里面存的username        String username=(String) session.get("username");        //如果session里面存的有用户名,证明用户登录了        if(username!=null&&!username.equals("")){            return arg0.invoke();        }else{            return Action.LOGIN;        }    }}

action:LoginAction.java:

package com.web.action;@SuppressWarnings("serial")public class LoginAction extends BaseAction{    private String username;    private String password;       public String see(){        return SUCCESS;    }    //处理登录的方法    public String login(){        if(username.equals("admin")&&password.equals("123456")){            session.put("username", username);            return "index";        }else{            return LOGIN;        }    }          public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }   }

用户中心界面:success.jsp:

 <h2>登陆成功,这里是用户中心</h2>

登录界面:login.jsp:

<h2>拦截器测试</h2>    <s:form action="LoginAction!login.action" method="post">        <s:textfield name="username" label="姓名"></s:textfield>        <s:password name="password" label="密码"></s:password>        <s:submit value="登录"></s:submit>     </s:form>

struts2配置文件:struts.xml:

<struts>    <constant name="struts.devMode" value="true"></constant>    <!-- 配置包元素 -->    <package name="default" extends="struts-default" namespace="/">      <interceptors>        <interceptor name="SeeInterceptor" class="com.web.interceptor.SeeInterceptor"></interceptor>      </interceptors>      <action name="LoginAction" class="com.web.action.LoginAction">        <interceptor-ref name="SeeInterceptor">          <!-- 设置不用被过滤的方法 -->          <param name="excludeMethods">login</param>        </interceptor-ref>        <interceptor-ref name="defaultStack"></interceptor-ref>        <result name="success">/success.jsp</result>        <result name="login">/login.jsp</result>        <result name="index">/index.jsp</result>      </action>    </package></struts>

web.xml:

<filter>    <filter-name>struts2</filter-name>    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>    <init-param>      <param-name>struts.i18n.encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>struts2</filter-name>    <url-pattern>*.action</url-pattern>  </filter-mapping>  <filter-mapping>    <filter-name>struts2</filter-name>    <url-pattern>*.jsp</url-pattern>  </filter-mapping>


原创粉丝点击