Struts2--拦截器

来源:互联网 发布:linux编译安装mysql 编辑:程序博客网 时间:2024/06/06 15:41

1 action拦截器
拦截器整体流程:
这里写图片描述
1.1 基于配置文件方式配置拦截器
请求到达后台后,可以通过配置执行方法的拦截器来达到比如权限控制,日志一系列功能。
写一个Demo,来计算一个处理请求使用了多长时间。
请求处理类及方法:

public class HelloAction {    public String execute(){        System.out.println("execute");        return Action.SUCCESS;    }}

自定义拦截器:

<struts>    <package name="default" extends="struts-default" namespace="/"><!--    配置拦截器 -->        <interceptors><!--            配置拦截器 -->            <interceptor name="time" class="cn.sxt.interceptor.TimeInterceptor"></interceptor>        </interceptors>        <action name="hello" class="cn.sxt.action.HelloAction">            <result>/hello.jsp</result><!--            引用拦截器,将拦截器和action关联-->            <interceptor-ref name="time"/>         </action>    </package></struts>

struts.xml配置文件:

<struts>    <package name="default" extends="struts-default" namespace="/"><!--    配置拦截器 -->        <interceptors><!--            配置拦截器 -->            <interceptor name="time" class="cn.sxt.interceptor.TimeInterceptor"></interceptor>        </interceptors>        <action name="hello" class="cn.sxt.action.HelloAction">            <result>/hello.jsp</result><!--            引用拦截器,将拦截器和action关联-->            <interceptor-ref name="time"/>         </action>    </package></struts>

将action和拦截器关联。
可以配置一个拦截器栈:

<struts>    <package name="default" extends="struts-default" namespace="/"><!--    配置拦截器 -->        <interceptors><!--            依次配置拦截器 -->            <interceptor name="time" class="cn.sxt.interceptor.TimeInterceptor"></interceptor><!--            定义一个拦截器栈 ,可以包含多个拦截器的引用,栈的引用和拦截器一致-->            <interceptor-stack name="myStack">                <interceptor-ref name="time"/>                 <!-- 引入默认的拦截器栈 -->                <interceptor-ref name="defaultStack"/>            </interceptor-stack>        </interceptors>        <!-- 将定义的栈设置为默认的拦截器-->        <default-interceptor-ref name="myStack"/>        <action name="hello" class="cn.sxt.action.HelloAction">            <result>/hello.jsp</result>            <interceptor-ref name="myStack"/>        </action>    </package></struts>

1.2 基于注解方式的拦截器

package com.example.actions;import com.opensymphony.xwork2.ActionSupport;import org.apache.struts2.convention.annotation.Action;import org.apache.struts2.convention.annotation.Actions;@InterceptorRefs({    @InterceptorRef("interceptor-1"),    @InterceptorRef("defaultStack")})public class HelloWorld extends ActionSupport {  @Action(value="action1", interceptorRefs=@InterceptorRef("validation"))  public String execute() {    return SUCCESS;  }  @Action(value="action2")  public String doSomething() {    return SUCCESS;  }}

2 方法拦截器
自定义方法拦截器需要继承MethodFilterInterceptor,重写doIntercept()方法。
自定义方法拦截器:

//方法拦截器public class ListInterceptor extends MethodFilterInterceptor{    @Override    protected String doIntercept(ActionInvocation invocation) throws Exception {        // TODO Auto-generated method stub        System.out.println("方法拦截器被执行");        return invocation.invoke();    }}

两个测试请求类:

public class HelloAction {    public String add(){        System.out.println("add");        return Action.SUCCESS;    }}public class LoginAction {    public String login() {        System.out.println("login");        return Action.SUCCESS;    }}

struts.xml配置

<struts>    <package name="default" extends="struts-default" namespace="/"><!--    配置拦截器 -->        <interceptors><!--            依次配置拦截器 -->            <interceptor name="methodInterceptor" class="cn.sxt.interceptor.ListInterceptor"></interceptor><!--            定义一个拦截器栈 ,可以包含多个拦截器的引用,栈的引用和拦截器一致-->            <interceptor-stack name="myStack">                <interceptor-ref name="methodInterceptor"><!--                    配置被拦截的方法,中间用,号隔开。 -->                    <param name="includeMethods">add</param><!--                    配置不被拦截的方法 -->                    <param name="excludeMethods">login</param>                </interceptor-ref>  <!--            引入默认的拦截器-->                <interceptor-ref name="defaultStack"/>            </interceptor-stack>        </interceptors><!--        定义默认的拦截器/栈 -->        <default-interceptor-ref name="myStack"/>        <action name="add" class="cn.sxt.action.HelloAction" method="add">            <result name="success">/success.jsp</result>        </action>        <action name="login" class="cn.sxt.action.LoginAction" method="login">            <result name="success">/success.jsp</result>        </action>    </package></struts>

当执行add方法时拦截,执行,执行login方法时不拦截。如果一个方法配置在excludeMethods,同时又配置在includeMethods 中,将会被拦截,

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 领导故意整我该怎么办 小孩怎么教育都不听怎么办 赵本山怎么办的刘涌 起诉离婚被告不出庭怎么办 安装u盘进入系统怎么办 思讯加密狗坏了怎么办 村主任选不出来怎么办 你的id已被停用怎么办 车牌摇号中签后怎么办 北京车卖了指标怎么办 车的电脑板坏了怎么办 饭卡消磁了怎么办妙招 有好项目没资金怎么办 买的股票涨停了怎么办 考研没过国家线怎么办 中石化的油卡怎么办 5173号被找回了怎么办 谭木匠梳子断了怎么办 198地块上的企业怎么办 天猫投诉不成立怎么办 顾客老嫌瓷砖贵怎么办 公司的公章丢了怎么办 物业不给充电费怎么办 怎么办社保卡去哪里办 单位没给社保卡怎么办 诈骗链接点开了怎么办 私人老板拖欠工资不给怎么办 辞职了工资不发怎么办 老板欠工资不给怎么办 投资平台跑路了怎么办 眼镜太松往下滑怎么办 塑胶水管管断了怎么办 淘宝排名靠后了怎么办 我有古董想出售怎么办 被拍卖公司骗了怎么办 苹果4s铃声太小怎么办 新号码注册微信怎么办 uc不能下种子了怎么办 刚出生的小牛喘怎么办 回奶之后有硬块怎么办 回奶第十天硬块怎么办