抽象类|面试官:你是怎么用Spring MVC拦截器的
文章插图
介绍我们要写自己的拦截器一般有两种方式 。
1.实现HandlerInterceptor接口
2.继承HandlerInterceptorAdapter抽象类
我就直接继承了HandlerInterceptorAdapter抽象类 , 按需重写部分实现即可 。
HandlerInterceptor有如下3个方法
preHandler:在controller执行之前调用
postHandler:controller执行之后 , 且页面渲染之前调用
afterCompletion:页面渲染之后调用 , 一般用于资源清理操作
先定义一下返回值 , 因为这是一个微服务项目 , 最好把项目的返回值都统一成一个对象 , 这样序列化和反序列化都比较方便 , 而且前端解析也很方便 。
文章插图
记录接口响应时间
文章插图
这个拦截器记录了每个接口的响应时间 , 还有接口的路径及参数 , 有了路径 , 参数 , 响应时间这3个指标 , 排查问题应该很方便了 。
判断用户是否登录登录接口为
文章插图
登录成功会设置session的属性值 。
文章插图
可以看到当从session中取不到相应的用户信息时 , 说明用户没有登录 , 应该提示登录
。 当用户已经登录时会调用request.setAttribute方法 , 设置一下用户的信息 , 方便记录操作人之类的 。 后面会演示到 。
这里用了一个工具类 , 来重写返回的json
文章插图
JsonUtil是我写的将对象转为json的工具类
没有登录显示
{ "code": 2, "desc": "请登录"}登录成功显示
{ "code": 0, "desc": "成功"}判断用户的权限这个项目的权限是基于RBAC(Role-Based Access Control , 基于角色的访问控制)来做的 , 简答来说需要五张表 。
用户表
用户角色关联表
角色表
角色权限关联表
权限表
基于这种模型 , 用注解+拦截器来实现权限管理还是很容易的 , 大概演示一下
权限注解(在需要进行权限校验的url上加 , id属性一般为权限id)
文章插图
如下面代码 , 删除用户需要id=0的权限(默认值) , 并且会打印出操作人是谁 , request.getAttribute之所以能取到值 , 是因为在登录的时候已经设置了 , 可以看一下前面 , 当出现问题的时候就可以迅速排查到哪些用户做了哪些操作 , 能迅速找到责任人 , 当然我这里打印的信息很少 , 简单演示一下就行 。
文章插图
拦截器如下
文章插图
这个拦截器是和登录拦截器一起使用的 , 不然会让用户一直登录 。
接口权限校验这个写起来比较长 , 单开一篇吧 。
配置配置拦截器的方法如下 , 注意顺序的问题 , 最起码本节中LoginInterceptor和AuthorityInterceptor这2个拦截器的顺序是不能颠倒的 。
文章插图
图没截全 , 放一下代码
@Configurationpublic class DemoWebMvcConfigurerAdapter extends WebMvcConfigurationSupport { @Override protected void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new SystemInterceptor()); registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login"); registry.addInterceptor(new AuthorityInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login"); }}说一下拦截器的执行顺序 , 有2个拦截器 , 则执行顺序为
preHandler 1preHandler 2postHandler 2postHandler 1afterCompletion 2afterCompletion 1github地址为:
【抽象类|面试官:你是怎么用Spring MVC拦截器的】
- 人民币|天猫国际新增“服务大类”,知舟集团提醒入驻这些类目的要注意
- 互联网|强制收集个人信息?国家网信办拟为38类App戴紧箍
- 介绍|5分钟介绍各种类型的人工智能技术
- 实体店|这3类手机建议“网购”,实体店太坑了!网友:咋不早说?
- 人类|距离人类“玩坏”自己的电脑桌面,还需要多久?
- 同比|今年前10个月,上海商品类网络购物交易额5520.2亿元,同比增长12.9%!
- 产品|墨案Inkpad X超级阅读器:10英寸大屏,同品类号称无敌
- 发现|我们调研了数万个用户,发现最不可信的是人类
- 产品|秦朔谈物联网中央空调:并非是产品,而是新品类
- 同城|58同城关联企业成立信息技术公司,经营范围含第一、二类增值电信业务