当前位置: 首页 > news >正文

SpringBoot——拦截器

优质博文:IT-BLOG-CN

一、登录时可能会出现重复提交问题。我们可以通过重定向解决此问题。例如:用户提交的请求为:/user/login,通过redirect:重定向至 main.html请求。

@PostMapping("/user/login")
public String login(@RequestParam("username") String name,@RequestParam("password") String password,Map<String,String> map,HttpSession session){if(!StringUtils.isEmpty(name) && password.equals("123456")){//将用户名设置到session中session.setAttribute("loginUser",name);return "redirect:/main.html";}else{map.put("msg","密码或用户名错误");return "index";}
}

二、配置视图映射,新建配置类通过继承WebMvcConfigurerAdapter类,实现addViewControllers方法,添加视图映射。WebMvcConfigurerAdapter该抽象类其实里面没有任何的方法实现,只是空实现了接口WebMvcConfigurer内的全部方法,并没有给出任何的业务逻辑处理,这一点设计恰到好处的让我们不必去实现那些我们不用的方法,都交由WebMvcConfigurerAdapter抽象类空实现,如果我们需要针对具体的某一个方法做出逻辑处理,仅仅需要在WebMvcConfigurerAdapter子类中@Override对应方法就可以了。

@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("index");registry.addViewController("/index.html").setViewName("index");registry.addViewController("/main.html").setViewName("dashboard");}
}

三、添加自己配置的拦截器:因为当我们访问:/main.html请求的时候,也可以跳转至dashboard.html页面,需要实现HandlerInterceptor接口。通过preHandle判断是否登录成功。preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;

public class LoginHandlerInterceptor implements HandlerInterceptor{@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {Object user = httpServletRequest.getSession().getAttribute("loginUser");if(user == null){httpServletRequest.setAttribute("msg","没有权限请先登录");httpServletRequest.getRequestDispatcher("/index.html").forward(httpServletRequest,httpServletResponse);return false;}else{//已登录,放行。return true;}}postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返 回ModelAndView,但未进行页面渲染),有机会修改ModelAndView (这个博主就基本不怎么用了);@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}//afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);    @Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}
}

四、需要将自己定义的拦截器注册到IOC容器中,进入我们自定义的配置类MyMvcConfig。需要注意的是登录请求/user/login不要忘记排除掉。

@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {//super.addInterceptors(registry);//SpringBoot已经做好了静态资源映射registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/index.html","/","/user/login");}
}

相关文章:

  • 【沐风老师】在3dMax中如何把对象随机散布在表面上?
  • 40、Flink 的Apache Kafka connector(kafka source 和sink 说明及使用示例) 完整版
  • 介绍 Docker 的基本概念和优势,以及在应用程序开发中的实际应用。
  • [原创](免改BIOS)使用Clover升级旧电脑-(高阶玩法)让固态硬盘内置Win11 PE启动系统
  • 【ArcGIS Pro微课1000例】0034:矢量数据几何校正案例(Spatial Adjustment)
  • 微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库
  • java反序列化漏洞详解
  • requests库的学习(详细篇)
  • 实例讲解Simulink的MATLAB Function模块
  • git本地账户如何从一台电脑迁移到另外一台
  • mac 修改 hosts 文件
  • 使用v-md-editor开发sql查看器--实战
  • SpringBoot中的classpath都包含啥
  • 7000家门店的盈利增长,从导购的人效提升开始
  • ES 查询语法-详解
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【RocksDB】TransactionDB源码分析
  • Asm.js的简单介绍
  • codis proxy处理流程
  • egg(89)--egg之redis的发布和订阅
  • ES6--对象的扩展
  • ES6系统学习----从Apollo Client看解构赋值
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java比较器对数组,集合排序
  • JDK 6和JDK 7中的substring()方法
  • Just for fun——迅速写完快速排序
  • Map集合、散列表、红黑树介绍
  • Python 基础起步 (十) 什么叫函数?
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 检测对象或数组
  • 简单易用的leetcode开发测试工具(npm)
  • 解决iview多表头动态更改列元素发生的错误
  • 面试遇到的一些题
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 小李飞刀:SQL题目刷起来!
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 整理一些计算机基础知识!
  • ‌JavaScript 数据类型转换
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (12)目标检测_SSD基于pytorch搭建代码
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (WSI分类)WSI分类文献小综述 2024
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (生成器)yield与(迭代器)generator
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (一)Dubbo快速入门、介绍、使用