版权声明:天才在于积累,聪明在于勤奋 https://blog.csdn.net/weixin_42685022/article/details/82259510
springboot项目添加拦截器
拦截器的作用:URL访问权限过滤、session用户是否存在、拦截controller请求等等。
那么在这篇文章中,主要就其中是一种方法做一些整理,方便以后自己回忆。
我利用上次自己搭建的springboot初始项目,将项目进一步完善,逐渐添加功能。项目搭建步骤可以参考我的另外一篇博文:https://blog.csdn.net/weixin_42685022/article/details/82215893
添加拦截器的步骤:
1、创建一个类实现HandlerInterceptor接口,并重写方法。具体代码如下所示:
package com.example.springboottest1.interceptor;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class userLoginInterceptor implements HandlerInterceptor {
/*
* 视图渲染之后的操作
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception {
System.out.println("执行到了afterCompletion方法");
}
/*
* 处理请求完成后视图渲染之前的处理操作
* 通过ModelAndView参数改变显示的视图,或发往视图的方法
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
System.out.println("执行到了postHandle方法");
}
/*
* 进入controller层之前拦截请求
* 返回值:表示是否将当前的请求拦截下来 false:拦截请求,请求别终止。true:请求不被拦截,继续执行
* Object obj:表示被拦的请求的目标对象(controller中方法)
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
System.out.println("执行到了preHandle方法");
System.out.println(obj);
//判断用户是否登录
// if(request.getSession().getAttribute("session_user") == null){
//
// response.sendRedirect("userLogin");
// return false;
// }
return true;
}
}
2、创建一个类实现WebMvcConfigurer接口,具体代码如下所示:
package com.example.springboottest1.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class sessionInterceptor implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
/**
* 自定义拦截器,添加拦截路径和排除拦截路径
* addPathPatterns():添加需要拦截的路径
* excludePathPatterns():添加不需要拦截的路径
* 在括号中还可以使用集合的形式,如注释部分代码所示
*/
registry.addInterceptor(new userLoginInterceptor()).addPathPatterns("/user/queryAllUser").excludePathPatterns("/user/loginHtml");
// List list = new ArrayList();
// list.add("/user/loginHtml");
// list.add("/user/registerpage");
// list.add("/user/uregister");
// list.add("/user/userLogin");
//
// registry.addInterceptor(userLoginInterceptor).addPathPatterns("/**").excludePathPatterns(list);
}
}
3、拦截结果: