配置拦截器只需要两个类
import cn.asxuexi.tool.URLInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* Title:
*
* @author: chenmingyue
* @date: 2018/3/16 12:01
* Description:配置URLInterceptor拦截器,以及拦截路径
*/
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns 用于添加拦截规则
// excludePathPatterns 用户排除拦截
registry.addInterceptor(new URLInterceptor()).addPathPatterns("/*/*")
.excludePathPatterns("/findController/getFindData").excludePathPatterns("/findController/getFindSeek");//初始页和搜索不拦截
super.addInterceptors(registry);
}
}
findController/getFindData和findController/getFindSeek这两个请求不被拦截,根据自己的需求来,可以不写,这样所有的请求都会被拦截
/**
* 拦截器拦截请求
*/
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//重写方法中内容根据具体项目来
public class URLInterceptor implements HandlerInterceptor {
//前拦截
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
boolean mark;
int code = (int) Token_JWT.verifyToken().get("code");
if (code == 600) {
mark = true;
} else {
request.setAttribute("find", 400);
mark = false;
}
return mark;
}
//post拦截
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {
// if (modelAndView != null){
// if(! (modelAndView.getView() instanceof RedirectView)){
// String basePath = request.getContextPath();
// //modelAndView.addObject("basePath",basePath);
// request.setAttribute("basePath",basePath);
// }
// }
}
//结束之后拦截
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
上面的代码中这部分是根据自己的需求来判断的
boolean mark;
int code = (int) Token_JWT.verifyToken().get("code");
if (code == 600) {
mark = true;
} else {
request.setAttribute("find", 400);
mark = false;
}
Token_JWT.verifyToken().get(“code”);是自己写的,用返回值来判断当前用户是否登录,600是登录,400是没有登录,
request.setAttribute(“find”, 400); 这个的意思是给前台传数据,具体用法可以看看这个网址:
后台通过request.setAttribute向前台传值,前台如何去获取其中的对象或属性值
返回值为true时则可以继续向下执行,返回值为false时则不向下执行,并向前台传(“find”, 400),相当于HasMap中的k,v。