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.jspresult>
                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">mResultparam>
                        result>
                        <result name="input">/WEB-INF/index/index.jspresult>
                        <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">mResultparam>
                        result>
                action>

        package>
struts>

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

注意:

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

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

配置好了后,我们需要写一个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()方法。

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

你可能感兴趣的:(javaEE,struts2,interceptor)