对于管理系统或者其他需要用户登录的系统,登录验证是必不可少的环节。在SpringBoot开发的项目中,用户是通过实现拦截器Login拦截验证来实现的。1、SpringBoot实现登录拦截的原理SpringBoot通过实现HandlerInterceptor接口实现拦截器,通过实现WebMvcConfigurer接口实现一个配置类,将拦截器注入到配置类中,最后通过@Configuration注解注入配置。1.1.实现HandlerInterceptor接口。要实现HandlerInterceptor接口,需要实现三个方法:preHandle、postHandle和afterCompletion。三个方法的作用如下:packageblog.interceptor;导入博客.entity.User;导入org.springframework.web.servlet.HandlerInterceptor;导入org.springframework.web.servlet.ModelAndView;导入javax.servlet.http.HttpServletRequest;导入javax.servlet.http.HttpServletResponse;导入javax.servlet.http.HttpSession;publicclassUserLoginInterceptorimplementsHandlerInterceptor{/****在请求处理之前调用(在Controller方法调用之前)*/@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{System.out.println("执行了拦截器的preHandle方法");尝试{HttpSessionsession=request.getSession();//统一拦截(查询当前session是否有用户)(这里每次登录成功后,用户都会写入session)Useruser=(User)session.getAttribute("user");如果(用户!=null){返回真;}response.sendRedirect(request.getContextPath()+"登录");}catch(Exceptione){e.printStackTrace();}返回假;//如果设置为false,请求时,拦截器执行到这里不会继续操作//如果设置为true,请求会继续执行后续操作}/****在请求处理完成后调用视图被渲染(调用Controller方法后)*/@OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{System.out.println("执行拦截器的postHandle方法");}/****整个请求结束后调用,即DispatchServlet渲染对应视图后Executed(主要用于资源清理)*/@OverridepublicvoidafterCompletion(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,Exceptionex)throwsException{System.out.println("执行了拦截器的afterCompletion方法");}}preHandle在Controller之前执行,所以拦截器的功能主要在这部分实现:检查session中是否有用户对象;如果存在,则返回true,那么Controller会继续运行;如果不存在,则跳转到登录界面Controller在执行前就是通过这个拦截器执行preHandle.1.2,实现WebMvcConfigurer接口,注册拦截器实现WebMvcConfigurer接口实现一个配置类,并将上面实现的拦截器的一个对象注册到这个配置类中.packageblog.config;导入blog.interceptor.UserLoginInterceptor;导入org.springframework.context.annotation.Configuration;导入org.springframework.web.servlet.config.annotation.InterceptorRegistration;导入org.springframework.web.servlet.config。annotation.InterceptorRegistry;importorg.springframework.web.servlet.config.annotation.WebMvcConfigurer;@ConfigurationpublicclassLoginConfigimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){//注册TestInterceptor拦截器RegistorRegistrationInterceptorRegistrationUserLoginInterceptor());registration.addPathPatterns("/**");//所有路径都拦截registration.excludePathPatterns(//添加非拦截路径"/login",//登录路径"/**/*.html",//html静态资源"/**/*.js",//js静态资源"/**/*.css"//css静态资源);}}在拦截器列表中注册拦截器,并指定拦截哪些访问路径,哪些访问路径不拦截,哪些资源文件不拦截;最后,使用@Configuration注释将配置注入到SpringBoot中。基础教程和示例代码见这里:https://github.com/javastacks...1.3,保持登录状态,只需要登录一次。如果您已经登录,下次访问时无需重新登录,可直接访问网站内容。正确登录后,用户被保存在会话中。再次访问该页面时,登录拦截器可以找到用户对象,不需要再次拦截登录界面。@RequestMapping(value={"","/","/index"},method=RequestMethod.GET)publicStringindex(Modelmodel,HttpServletRequestrequest){Useruser=(User)request.getSession().getAttribute(“用户”);model.addAttribute("用户",用户);return"users/index";}@RequestMapping(value={"/login"},method=RequestMethod.GET)publicStringloginIndex(){return"users/login";}@RequestMapping(value={"/login"},method=RequestMethod.POST)publicStringlogin(@RequestParam(name="username")Stringusername,@RequestParam(name="password")Stringpassword,Model模型,HttpServletRequest请求){Useruser=userService.getPwdByUsername(用户名);Stringpwd=user.getPassword();Stringpassword1=MD5Utils.md5Code(password).toUpperCase();Stringpassword2=MD5Utils.md5Code(password1).toUpperCase();if(pwd.equals(password2)){模型.addAttribute("用户",用户);request.getSession().setAttribute("用户",用户);返回“重定向:/索引”;}else{返回“用户/失败”;}}2.代码实现及示例代码实现如上图。登录成功后,用户信息保存在session中,浏览器下次登录时可以根据自己的SESSIONID找到对应的session。不用重新登录,在Chrome浏览器中就可以看到了。三、效果验证3.1.访问localhost:8081/index页面:重定向到localhost:8081/login,实现登录拦截。3.2.正确输入用户名和密码进行登录。3.3.再次访问localhost:8081/index,没有再次被登录拦截器拦截,证明可以保持登录。版权声明:本文为CSDN博主“Kant101”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。