在web开发的过程中,为了实现登录权限验证,我们往往需要添加一个拦截器在用户的的请求到达controller层的时候实现登录验证,那么SpringBoot如何添加拦截器呢?
步骤如下:
1.继承WebMvcConfigureAdapter类,覆盖其addInterceptors接口,注册我们自定义的拦截器:
/** * 注册拦截器 */ @Configuration //@EnableAutoConfiguration //表示springBoot不再托管springMvc public class MyConfig extends WebMvcConfigurerAdapter { @Override public void addInterceptors(InterceptorRegistry registry) { //注册自定义拦截器,添加拦截路径和排除拦截路径 registry.addInterceptor(new LoginInterceptor()).excludePathPatterns("/login", "/", "/index.html"); } }
2.实现HandlerInterceptor 实现三个方法 这里主要是实现了第一个方法:
public class LoginInterceptor implements HandlerInterceptor { /** * 访问前拦截 * @param request * @param response * @param handler * @return true 放行 false 拦截 * @throws Exception * */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.err.println("---进入拦截器--"); HttpSession session = request.getSession(); Object loginUser = session.getAttribute("loginUser"); if (loginUser==null){ //采取转发 request.getRequestDispatcher("/login").forward(request,response); return false; }else { return true;//放行 } } /** * 环绕拦截 * @param request * @param response * @param handler * @param modelAndView * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 访问后拦截 * @param request * @param response * @param handler * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }
当用户的请求到达controller层进行登陆拦截,所有的请求都会被拦截,然后在prehandle里面判断,false进行拦截,true放行