济南网站优化推广,网站推广建设阶段,一流的手机网站建设,做雷达干扰的网站#x1f600;前言 本篇博文是关于拦截器-HandlerInterceptor的使用#xff0c;希望你能够喜欢 #x1f3e0;个人主页#xff1a;晨犀主页 #x1f9d1;个人简介#xff1a;大家好#xff0c;我是晨犀#xff0c;希望我的文章可以帮助到大家#xff0c;您的满意是我的动… 前言 本篇博文是关于拦截器-HandlerInterceptor的使用希望你能够喜欢 个人主页晨犀主页 个人简介大家好我是晨犀希望我的文章可以帮助到大家您的满意是我的动力 欢迎大家这里是CSDN我总结知识的地方欢迎来到我的博客感谢大家的观看 如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦 文章目录 拦截器-HandlerInterceptor基本介绍基本步骤: 拦截器应用实例需求:代码实现 注意事项和细节URI 和URL 的区别举例说明: 总结 拦截器-HandlerInterceptor
基本介绍
在Spring Boot 项目中 拦截器是开发中常用手段要来做登陆验证、性能检查、日志记录等。
基本步骤:
√ 编写一个拦截器实现HandlerInterceptor 接口 √ 拦截器注册到配置类中(实现WebMvcConfigurer 的addInterceptors) √ 指定拦截规则
拦截器应用实例
需求:
使用拦截器防止用户非法登录, 如图- 使用拦截器就不需要在每个方法验证了 浏览器输入: http://localhost:8080/manage.html , 如果用户没有登录则返回登录界面. 代码实现
创建com/my/usersys/interceptor/LoginInterceptor.javapackage com.
Slf4j
public class LoginInterceptor implements HandlerInterceptor {// 目标方法执行前被调用.Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//为了让小伙伴看到访问的URIString requestURI request.getRequestURI();String requestURL request.getRequestURL().toString();log.info(preHandle拦截到的请求的URI{}, requestURI);log.info(preHandle拦截到的请求的URL{}, requestURL);//进行登录的校验HttpSession session request.getSession();Object loginAdmin session.getAttribute(loginAdmin);if (null ! loginAdmin) {//说明该用户已经成功登录//放行return true;}//拦截, 重新返回到登录页面request.setAttribute(msg, 你没有登录/请登录~~);request.getRequestDispatcher(/).forward(request, response);return false;}//目标方法执行完成以后调用Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {log.info(postHandle执行了...);}//页面渲染以后调用Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {log.info(afterCompletion执行了...);}
}创建com/my/usersys/config/WebConfig.java
Configuration
public class WebConfig implements WebMvcConfigurer {Overridepublic void addInterceptors(InterceptorRegistry registry) {//注册自定义拦截器LoginInterceptorregistry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**) //拦截所有的请求.excludePathPatterns(/,/login,/images/**);//指定要放行的后面可以根据业务需求来添加放行的请求路径}
}修改com/my/usersys/controller/AdminController.java 去掉session 验证用户是否登录代码, 并完成测试, 注意看页面和后台日志.
//处理用户的请求到 manage.htmlGetMapping(/manage.html)public String mainPage(Model model, HttpSession session) {log.info(进入mainPage());//可以这里集合-模拟用户数据, 放入到request域中并显示ArrayListUser users new ArrayList();users.add(new User(1, 关羽~, 666666, 20, gysohu.com));users.add(new User(2, 张飞, 666666, 30, zfsohu.com));users.add(new User(3, 赵云, 666666, 22, zysohu.com));users.add(new User(4, 马超, 666666, 28, mcsohu.com));users.add(new User(5, 黄忠, 666666, 50, hzsohu.com));//放入model的数据默认到request域model.addAttribute(users, users);return manage; //这里才是我们的视图解析到 /templates/manage.html}注意事项和细节
URI 和URL 的区别
URI Universal Resource Identifier URL Universal Resource Locator Identifier标识符Locator定位器从字面上来看, URI 可以唯一标识一个资源, URL 可以提供找到该资源的路径
举例说明:
String requestURI request.getRequestURI();
String requestURL request.getRequestURL().toString();注册拦截器, 依然可以使用如下方式
public class WebConfig /*implements WebMvcConfigurer*/ {//将我们的拦截器, 注入到容器中//Override//public void addInterceptors(InterceptorRegistry registry) {//// //注册自定义拦截器LoginInterceptor// registry.addInterceptor(new LoginInterceptor())// .addPathPatterns(/**) //拦截所有的请求// .excludePathPatterns(/,/login,/images/**);//指定要放行的后面可以根据业务需求来添加放行的请求路径//}Beanpublic WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {Overridepublic void addInterceptors(InterceptorRegistry registry) {System.out.println(addInterceptors~~~);//注册拦截器registry.addInterceptor(new LoginInterceptor()).addPathPatterns(/**).excludePathPatterns(/,/login,/images/**);}};}
}总结
URI 可以唯一标识一个资源, URL 可以提供找到该资源的路径。拦截所有的请求时要注意哪些资源需要放行防止无法请求。拦截器注册到配置类中(实现WebMvcConfigurer 的addInterceptors)一定要指定拦截规则。
热门专栏推荐
Thymeleaf快速入门及其注意事项
Spring Initailizr–快速入门–SpringBoot的选择
带你了解SpringBoot支持的复杂参数–自定义对象参数-自动封装
Rest 优雅的url请求处理风格及注意事项 文章到这里就结束了如果有什么疑问的地方请指出诸大佬们一起来评论区一起讨论 希望能和诸大佬们一起努力今后我们一起观看感谢您的阅读 如果帮助到您不妨3连支持一下创造不易您们的支持是我的动力