zoukankan      html  css  js  c++  java
  • 自定义拦截器——实现用户未登录自动跳转到登录页面

    1.用户未登录自动跳转到登录页面

    1.1 编写拦截器类

    需要继承struts2的框架的MethodFilterInterceptor

    提供的工具类(用于获取session中的数据和用户信息):

    /**
     * 
     * @Title: BOSUtils  
     * @Description:   BOS项目工具类
     * @author YuKai Fan  
     * @date 2018年5月14日
     */
    public class BOSUtils {
        //获取session对象
        public static HttpSession getSession() {
            return ServletActionContext.getRequest().getSession();
        }
        
        //获取登录用户对象
        public static User getLoginUser() {
            return (User) getSession().getAttribute("loginUser");
        }
    }

    定义拦截器类:

    /**
     * 
     * @Title: BOSLoginInterceptor  
     * @Description:  自定义拦截器,实现用户未登录自动跳转到登录页面
     * @author YuKai Fan  
     * @date 2018年5月14日
     */
    public class BOSLoginInterceptor extends MethodFilterInterceptor {
    
        /**
         * 拦截方法
         */
        @Override
        protected String doIntercept(ActionInvocation invocation) throws Exception {
            //获取拦截的url地址
            /*ActionProxy proxy = invocation.getProxy();
            String actionName = proxy.getActionName();
            String namespace = proxy.getNamespace();
            String url = actionName + namespace;*/
            //从session中获取拦截对象
            User user = BOSUtils.getLoginUser();
            if (user == null) {
                //没有登录,跳转到登录页面
                return "login";
            }
            //放行
            return invocation.invoke();
        }
    
    }

    1.2 配置拦截器

    在struts.xml中配置自定义拦截器:

    <!-- 配置拦截器 -->
            <interceptors>
                <!-- 注册拦截器 -->
                <interceptor name="bosLoginInterceptor" class="com.javaweb.bos.web.interceptor.BOSLoginInterceptor">
                    <!-- 指定哪些方法不需要拦截 -->
                    <param name="excludeMethods">login</param>
                </interceptor>
                <!-- 定义拦截器栈 -->
                <interceptor-stack name="myStack">
                    <interceptor-ref name="bosLoginInterceptor"></interceptor-ref>
                    <interceptor-ref name="defaultStack"></interceptor-ref>
                </interceptor-stack>
            </interceptors>
            <default-interceptor-ref name="myStack"></default-interceptor-ref>
            <!-- 配置全局结果集 -->
            <global-results>
                <result name="login">/login.jsp</result>
            </global-results>
  • 相关阅读:
    Flex动画
    八大排序算法
    Android switch语句“case expressions must be constant expressions”
    MySQL修改root密码的多种方法
    Android中ListView控件onItemClick事件中获取listView传递的数据
    超详细Android接入支付宝支付实现,有图有真相
    Android蓝牙开发---与蓝牙模块进行通信
    Leecode no.19 删除链表的倒数第 N 个结点
    玩转java静态/动态代理
    Leecode no.198. 打家劫舍
  • 原文地址:https://www.cnblogs.com/FanJava/p/9034663.html
Copyright © 2011-2022 走看看