• Struts2之Struts2-2.5.5 Interceptor


    Struts2-2.5.5版本是目前为止最新的版本了,相对于之前的2.3版本以及再之前的版本而言,新版本改动了很多。

    好了,废话不多说,GO CODE!

    基本jar包:

    web.xml核心配置,这里要注意咯!

            <!-- struts2核心控制器 -->
        <filter>
            <filter-name>struts2</filter-name>
                    <!-- 这里要格外注意咯 -->
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
            <!-- 设置struts2默认编码集为UTF-8 -->
            <init-param>
                <param-name>struts.il8.encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <!-- 设置struts.xml文件位置 -->
            <init-param>
                <param-name>filterConfig</param-name>
                <param-value>classpath:struts.xml</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    web.xml

    接下来是struts.xml

    <struts>
        <!-- 设置默认编码集为UTF-8 -->
        <constant name="struts.il8n.encoding" value="UTF-8" />
        <!--设置开发者模式 -->
        <constant name="struts.devMode" value="true" />
        <!-- 当 struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生 产环境下使用),开发阶段最好打开 -->
        <constant name="struts.configuration.xml.reload" value="true" />
        <!--设置主题 -->
        <!-- <constant name="struts.ui.theme" value="simple" /> -->
        <!-- 该 属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即 所有匹配*.action的请求都由Struts 2处理。如 
            果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开 -->
        <constant name="struts.action.extension" value="action," />
        <!-- 设置是否支持动态方法调用,true为支持,false不支持. -->
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
        <constant name="struts.serve.static.browserCache" value="false" />
        <constant name="struts.convention.default.parent.package" value="common"/>
        <!-- 公共package -->
        <package name="common" namespace="/" extends="struts-default">
            <!-- 配置拦截器 -->
            <interceptors>
                <!-- 注册拦截器 -->
                <interceptor name="loginInterceptor" class="com.Struts2Dashboard.action.LoginInterceptor" />
                <!-- 引用已经注册了拦截器,形成自定义拦截器栈,自定义拦截器栈,将覆盖到默认栈 ,必须手动再自定义拦截器栈中 引用默认栈 -->
                <interceptor-stack name="loginStack">
                    <!-- 默认 -->
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                    <!-- 自定义 -->
                    <interceptor-ref name="loginInterceptor"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            <!-- 修改当前<package>默认栈,修改后package下的所有的action都将使用此栈 -->
            <default-interceptor-ref name="loginStack"></default-interceptor-ref>
            <!-- 全局结果集 -->
            <global-results>
                <!-- 没有登陆 -->
                <result name="noLogin">/WEB-INF/pages/sweet/404.jsp</result>
            </global-results>
        </package>
    </struts>
    struts.xml

    可有可无,不要怕麻烦,前期是为了后期维护做准备的。

    bean就不在粘贴了哈,需要的话,可以评论留言哈。

    /**
     * 登录拦截器action
     */
    @SuppressWarnings("serial")
    public class LoginInterceptor implements Interceptor {
        //初始化    
        public void init() {
        }
        //拦截
        public String intercept(ActionInvocation invocation) throws Exception {
            
            /*if(LoginAction.class == invocation.getAction().getClass()){  
                return invocation.invoke();  
            }*/
            Object action = invocation.getAction();
            if (action instanceof LoginAction) {  
                //如果是LoginAction,则进行执行,即不做拦截
                return invocation.invoke();  
            }
    
            //判读session是否存在用户
            User user =  (User) ActionContext.getContext().getSession().get("user");
            System.out.println(user);
            
            if(user == null){
                System.out.println("action");
                return "noLogin";
            }
            //放行
            return invocation.invoke();
        }
        //销毁
        public void destroy() {
        }
    }
    LoginInterceptor
    public class LoginAction extends ActionSupport implements ModelDriven<User> {
    
        private User user = new User();
    
        @Override
        public User getModel() {
            // TODO Auto-generated method stub
            return user;
        }
        @Action(value="login")
        public String execute() throws Exception {
            ActionContext actionContext = ActionContext.getContext();
            if ("admin".equals(user.getUsername()) && "admin".equals(user.getPassword())) {
                actionContext.getSession().put("user", user);
                System.out.println("success");
                return "success";
            } else {
                System.out.println("input");
                return "input";
            }
        }
    
    }
    LoginAction

    只是部分关键性代码,需要项目的话,评论处留下联系方式。

    没有考虑session过期的情况哈,只是最基础的登录拦截器而已,请多多指教谢谢。

    转载请注明出处,谢谢!未经授权请勿私自对本文相关图片进行添加水印!

  • 相关阅读:
    性能优化汇总
    数组迭代,对象迭代
    数据类型转换
    Vue v-model原理解析
    闭包机制及浏览器垃圾回收处理
    面试题解析
    作用域链查找机制,浏览器的垃圾回收机制
    函数的创建与执行,执行函数
    Mybatis底层源码执行流程
    简单易懂的TCP三次握手及四次挥手
  • 原文地址:https://www.cnblogs.com/tenglongwentian/p/6175642.html
Copyright © 2020-2023  润新知