使用Spring中的interceptor

最近做的一个后台管理系统要做一些url拦截,如果未登录的用户是无法访问管理主页(index),然后自动跳转到登录界面,原来我一直用的是很弱智的方法(在每个jsp页面进行session校验),现在想起来好麻烦呀!
虽然可以为达到目的不择手段,但是有好手段的话要试一下好手段嘛!
今天get到了一个小技巧:Spring中的interceptor(拦截器)
在配置文件application-web.xml中进行如下的配置:

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/login/**"/>
            <mvc:exclude-mapping path="/css/**"/>
            <mvc:exclude-mapping path="/js/**"/>
            <mvc:exclude-mapping path="/images/**"/>
            <mvc:exclude-mapping path="/api/**"/>
            <bean class="org.imooc.controller.interceptor.SessionInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

说明:

<mvc:mapping path="/**"/>//表示你要过滤的路径(也就是访问的url),这里过滤所有访问

//不能把所有的路径都过滤呀,要不怎么访问,下面的标签就是用来排除我们要使用的路径
<mvc:exclude-mapping path="/login/**"/>    //login用于登录所以本不能拦截
<mvc:exclude-mapping path="/css/**"/>      //css要是被拦截的话登录界面会变得很丑,所以不能拦截
<mvc:exclude-mapping path="/js/**"/>       //同理,js也不能拦截
<mvc:exclude-mapping path="/images/**"/>   //同理,图片也不能拦截
<mvc:exclude-mapping path="/api/**"/>      //前端接口就更不能拦截了

<bean class="org.imooc.controller.interceptor.SessionInterceptor"></bean>   //进行拦截处理的类

下面我们 看一下这个bean(实现HandlerInterceptor接口)
需要实现三个方法;

package org.imooc.controller.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.imooc.constant.SessionKeyConst;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 *session 拦截器
 */
public class SessionInterceptor implements HandlerInterceptor{
    /**
     * 在进入Handler方法之间执行
     * @return true:继续执行下一个拦截器,直到所有拦截器执行完再执行Controller
     *         false:从当前的拦截器往回执行所有拦截器的afterCompletion()方法,然后退出拦截器链,无法执行Controller
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        if(request.getSession().getAttribute(SessionKeyConst.USER_INFO)!=null){    //进行session校验
            return true;
        }
        request.getRequestDispatcher("/login/sessionTimeout").forward(request, response);   //跳转到错误页面
        return false;
    }
    /**
     * 在进入Handler方法之后,返回ModelAndView之前执行
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        // TODO Auto-generated method stub

    }
    /**
     * Handler方法执行之后执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值