springboot的拦截器
用于场景:有些后台页面需要登录后才能访问
直接上代码:
第一步:新建一个自己的拦截器:建立拦截器有两种
方式一:
HandlerInterceptor实现该类的
preHandle接口
public class AdminInterceptor implements HandlerInterceptor { /** * 在请求处理之前进行调用(Controller方法调用之前) */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { // System.out.println("执行了TestInterceptor的preHandle方法"); try { //统一拦截(查询当前session是否存在user)(这里user会在每次登陆成功后,写入session) User user=(User)request.getSession().getAttribute("USER"); if(user!=null){ return true; } response.sendRedirect(request.getContextPath()+"你的登陆页地址"); } catch (IOException e) { e.printStackTrace(); } return false;//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作 //如果设置为true时,请求将会继续执行后面的操作 }
方式二:
HandlerInterceptorAdapter继承该类。并重写
preHandle方法,如下:
public class MyInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object object=request.getSession().getAttribute("user"); if(!(handler instanceof HandlerMethod)){ return true; } if(object!=null){ return true; }else{ request.getRequestDispatcher("/admin/login").forward(request,response); return false; } } }
截图说明下,我用的是第二种方式建立拦截器的
第二步:把自己写的拦截器注入,现实WebMvcConfigurer类,并来调用,代码如下:
@Configuration public class MyWebAppConfigurer implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()) .addPathPatterns("/admin/**") .excludePathPatterns("/admin/login").excludePathPatterns("/admin/doLogin"); } }
截图说明下:
第三步:登录成功的操作:主要是要把用户信息储存到session中,拦截器中好做判断。
@ApiOperation(value = "用户登录", notes = "用户登录") @ApiImplicitParams({ @ApiImplicitParam(paramType = "query", name = "username", value = "用户名", required = true, dataType = "string"), @ApiImplicitParam(paramType = "query", name = "password", value = "用户密码", required = true, dataType = "string") }) @RequestMapping(value = "doLogin",method = RequestMethod.POST) public String doLogin(String username, String password, ModelMap modelMap, HttpSession session){ User user=userService.byUserName(username); if(null !=user){ if(user.getPassword().equals(MD5Tool.md5(password))){ modelMap.put("user",user); session.setAttribute("user",user);//把用户储存到session中 return "index"; }else{ return "login"; } }else{ return "login"; } }
就三步,个人理解,错误的地方请大家指点,谢谢!