struts2 拦截器的配置

 最近换了家新公司,主要负责前后台交互这块,用的ssh框架,所以我接触的是struts和前端较多,现在总结一下配置拦截器的一些知识,巩固一下。

struts2拦截器可以拦截一些请求,比如用户没登陆就想访问某个页面,比如用户没有某个页面的访问权限,却发送访问请求,这些都是要被拦截下来的,基于这些需求,我研究了一下struts2的拦截器。

  要使用拦截器,首先需要在struts.xml中配置,配置文件如下:

<struts>
        <package name="publicInterceptor" extends="global">

                <interceptors>
                        <!-- 登录拦截器 -->
                        <interceptor name="logon" class="com.arche.alderman.Interceptor.LoginInterceptor"/>
                        <!-- 登录拦截器堆栈 -->
                        <interceptor-stack name="publicLoginStack">
                                <interceptor-ref name="logon"/>
                                <!-- 引用默认的拦截器堆栈 -->
                                <interceptor-ref name="defaultStack"/>
                        </interceptor-stack>
                </interceptors>

                <global-results>
                        <result name="result_json">/WEB-INF/index/index.jsp</result>
                </global-results>

                <action name="public_oper_userLogin" class="com.arche.alderman.mvc.pub.controller.implement.PublicOperAction" method="userLogin">

                        <interceptor-ref name="publicLoginStack" />
                        <result name="result_json" type="json">
                                <param name="root">mResult</param>
                        </result>
                        <result name="input">/WEB-INF/index/index.jsp</result>
                        <result name="association"></result>
                        <result name="engineer"></result>
                        <result name="enterprise"></result>
                </action>

                <action name="public_check_*" class="com.arche.alderman.mvc.pub.controller.implement.PublicCheckAction" method="{1}">
                        <result name="result_json" type="json">
                                <param name="root">mResult</param>
                        </result>
                </action>

        </package>
</struts>

值得注意的是,定义的拦截器栈名和interceptor-stack的name必须保持一致。

注意:

<default-interceptor-ref name="publicLoginStack"/>

这段代码的作用是在整个package中的所有action,不管有没有写调用拦截器的这段代码:

<interceptor-ref name="publicLoginStack" />

都会默认调用拦截器,所以当有多个action时,需要手动添加上面这句代码,并且删除掉

<default-interceptor-ref name="publicLoginStack"/>

配置好了后,我们需要写一个interceptor类,来处理用户访问的请求(允许访问还是不允许等),这个类即上面<interceptor>的 class属性中的LoginInterceptor.java:

com.arche.alderman.Interceptor;

com.arche.alderman.constant.RequestInteractionString;
com.arche.alderman.constant.ServerCommonString;
com.arche.alderman.mvc.pub.vo.UserLoginInfo;
com.opensymphony.xwork2.ActionInvocation;
;
java.util.Map;

LoginInterceptor {
    String intercept(ActionInvocation actionInvocation) Exception {

        String name = actionInvocation.getInvocationContext().getName();
        (name.equals()) {
            actionInvocation.invoke();
        } {
            Map session = actionInvocation.getInvocationContext().getSession();
            (== session || session.isEmpty()) {
                ServerCommonString.;
            } {
                UserLoginInfo userLoginInfo = (UserLoginInfo) session.get(RequestInteractionString.);
                (== userLoginInfo){
                    ServerCommonString.;
                }{
                    (!= userLoginInfo.getUserId() || != userLoginInfo.getUserName() || != userLoginInfo.getUserType()) {
                        actionInvocation.invoke();
                    } {
                        ServerCommonString.;
                    }
                }

            }
        }
    }
}


需要特别注意的是,这个类要继承AbstractInterceptor类,然后重写interceptor()方法。

大概就是这些,挺简单的!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值