创建springMVC的拦截器需要实现org.springframework.web.servlet.HandlerInterceptor接口,
重写preHandle,postHandler,afterCompletion三个方法,如下:
package com.web.auction.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.web.auction.pojo.Auctionuser;
@Component //添加component注解,由容器托管该拦截器
public class CheckUserInterceptor implements HandlerInterceptor {
//在进入controller方法前调用
//返回true:放行--》执行controller方法--》postHandle方法--》return--》afterCompletion方法
//返回false:拦截,执行不了controller方法
//拦截器使用的 是代理模式,这里的Object handler是目标代理对象
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//现获取登录用户,如果登录用户不为空,则放行,否则拦截
HttpSession session = request.getSession();
Auctionuser logUser = (Auctionuser) session.getAttribute("user");
if(logUser==null) {
response.sendRedirect("/login");//重定向到controller中的“/login”
return false;
}else {
return true;
}
}
@Override
//在执行完controller后return语句前调用
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override //在执行完controller后return语句后调用
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
在springboot中,创建好拦截器之后还要进行注册
通过在以下配置文件中注册
package com.web.auction.config;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import com.web.auction.interceptor.CheckUserInterceptor;
@Configuration //该注解表明该类是一个配置类
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
@Autowired
private CheckUserInterceptor checkUserInterceptor;
@Override //注册拦截器的方法
public void addInterceptors(InterceptorRegistry registry) {
//存放不拦截的url的集合
List<String> patterns = new ArrayList<String>();
//所有静态资源和登录,注册,验证码有关的url都不拦截
patterns.add("/css/**");
patterns.add("/images/**");
patterns.add("/js/**");
patterns.add("/login");
patterns.add("/toRegister");
patterns.add("/defaultKaptcha");
patterns.add("/dologin");
patterns.add("/register");
//addPathPatterns("/**")设置拦截的url,除了上述不拦截的url,其他所有url都拦截 //excludePathPatterns(patterns)排除拦截的url
registry.addInterceptor(checkUserInterceptor).addPathPatterns("/**").excludePathPatterns(patterns);
}
}