springmvc的拦截器

在学了springmvc之后用它和spring和mybatis和maven一起做个小项目的时候用到了springmvc中的拦截器,当时学的时候没总结,今天来总结一下。                                                                                                                                  

Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必实现HandlerInterceptor接口 。

preHandle():这个方法在业务处理器处理请求之前被调用,在该方法中对用户请求 request 进行处理。如果程序员决定该拦截器对 请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去 进行处理,则返回true;如果程序员决定不需要再调用其他的组件 去处理请求,则返回false。 

postHandle():这个方法在业务处理器处理完请求后,但是DispatcherServlet 向客户端返回响应前被调用,在该方法中对 用户请求request进行处理。 

afterCompletion():这个方法在 DispatcherServlet 完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。

执行顺序:

FirstInterceptor#preHandle----->HandleAdapter#Handle----->FirstInterceptor#postHandle

----->FirstInterceptor#afterCompletion----->DispatcherServlet#render

我自己自定义了一个UserInterceptors 

package com.yc.votesystem.interceptors;

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

public class UserInterceptors implements HandlerInterceptor{
private final String USERSESSION ="usersession"; 
@Override
public void afterCompletion(HttpServletRequest arg0,
HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("afterCompletion被调用");
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object obj, ModelAndView arg3) throws Exception {
System.out.println("postHandle被调用");

}

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object obj) throws Exception {
Object sessionObj = request.getSession().getAttribute(USERSESSION);
System.out.println("preHandle被调用");
if(sessionObj!=null){
System.out.println("进入这里");
return true;
}
response.sendRedirect("/SSMVote/user/login");

return false;
}

}

然后在springmvc中添加拦截配置:
<mvc:interceptors>
<!--拦截所有的资源-->
<!--<bean class="com.yc.votesystem.interceptors.UserInterceptors"></bean>-->
<!--拦截指定资源-->
    <mvc:interceptor>   
                <mvc:mapping path="/vote/*"/> <!-- 管理员登录拦截 -->  
<mvc:exclude-mapping path="/user/login"/><!-- 不拦截的 -->
<bean class="com.yc.votesystem.interceptors.UserInterceptors"></bean>   
       </mvc:interceptor> 
</mvc:interceptors>

这样就可以对我的vote下所有的请求进行拦截,如果没有登录的话就会跳到登录界面。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值