自定义拦截器——实现用户未登录自动跳转到登录页面

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>

 

posted @ 2018-05-14 09:53  MichaelKai  阅读(927)  评论(0编辑  收藏  举报