Springboot整合(10)——Intercepter
本节说明2种拦截器的应用场景:为Shiro RememberMe功能提供session初始化和记录系统日志
为Shiro RememberMe功能提供session初始化
上一节讲述了shiro的配置,在最后的部分配置了shiro的rememberMe功能,但实际上遗留了一个小问题:登陆的时候我们知道,shiro会调用MyShiroRealm的doGetAuthenticationInfo方法,回头去看这个方法,你会发现session初始化是在这个方法里做的。而我们一旦使用了rememberMe功能,这个方法是不会调的,那么问题就来了,session无法初始化。如何解决这个问题呢?其中一种做法就是使用intercepter,具体做法如下:
1. 编写SessionIntercepter
@Component
publicclass SessionInterceptor implements HandlerInterceptor {
privatefinal Log LOG = LogFactory.getLog(SessionInterceptor.class);
@Resource
private UserService userInfoService;
@Override
publicboolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
LOG.info("---preHandle---");
System.out.println(request.getContextPath());
Subject currentUser = SecurityUtils.getSubject();
// 判断用户是通过记住我功能自动登录,此时session失效
if (!currentUser.isAuthenticated() && currentUser.isRemembered()) {
Session session = currentUser.getSession();
SysUser userInfo = (SysUser) currentUser.getPrincipal();
session.setAttribute("userId", userInfo.getId());
session.setAttribute("user", userInfo);
}
returntrue;
}
@Override
publicvoid postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,
ModelAndView modelAndView) throws Exception {
LOG.info("---postHandle---");
}
@Override
publicvoid afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
Object o, Exception e) throws Exception {
LOG.info("---afterCompletion---");
}
}
2. 在MyWebAppConfigurer中配置SessionIntersepter
@Resource
private SessionInterceptor sessionInterceptor;
/**
* 拦截器
*
*/
@Override
publicvoid addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(sessionInterceptor).addPathPatterns("/**").excludePathPatterns("/user/login");
super.addInterceptors(registry);
}
3. 在Controller中访问session。随便找个controller访问session,就用indexController吧。顺便说一下shiro里的session要怎么用:
Subject currentUser = SecurityUtils.getSubject();
Session session = currentUser.getSession();
System.out.println(session.getAttribute("user"));
4. 测试
可以尝试先不加入SessionIntercepter,即把下面这行代码注释掉
// registry.addInterceptor(sessionInterceptor).addPathPatterns("/**").excludePathPatterns("/user/login");
此时测试会发现后台打印的session值为null
加入SessionIntercepter,再测session值正常打印
记录系统日志
记录系统日志的意义就不多赘述了,直接说实现
1. 编写LogIntercepter
@Component
publicclass LogInterceptor implements HandlerInterceptor {
@Override
publicboolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
returntrue;
}
@Override
publicvoid postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
}
@Override
publicvoid afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// 保存日志到数据库的逻辑,根据实际情况自行实现
// LogService.saveLog(request, handler, ex, null);
System.out.println("HOST : " + request.getRemoteHost());
System.out.println("URI : " + request.getRequestURI());
System.out.println("ParamMap : " + request.getParameterMap());
}
}
2. 在MyWebAppConfigurer中配置LogIntersepter
@Resource
private LogInterceptor logInterceptor;
registry.addInterceptor(logInterceptor).addPathPatterns("/**");
3. 测试,启动项目,访问任意url,后台都会打印LogIntercepter中设置的信息
相关推荐
Spring boot+Mybatis+Mysql+Swagger整合,包括spring boot下创建过滤器filter与intercepter拦截器,使用Intellij idea创建工程,测试OK
Postman用的拦截器,可以自动获取cookie并填充到Postman。直接解压,然后用Chrome内核的浏览器加载已解压的插件。 使用方法,详见:https://blog.csdn.net/cjs1534717040/article/details/124289171
**Ajax Interceptor:深入理解与应用** Ajax Interceptor 是一款专为谷歌浏览器(Chrome)设计的插件,它允许开发者在Ajax请求发送后和响应返回前进行干预,从而实现对AJAX请求数据的修改。这款插件对于前端开发、...
1你可以在自己的日志中看到自己接口的出参和入参,同时你不用在每个接口中写打印的逻辑,直接交给拦截器完成。 2你可以任意包装你的出参,比如加上消耗的时间,添加一个唯一的uuid等等,同时这些东西都是由拦截器...
项目总结 (牛客网学习)头条资讯,包含登录注册,添加资讯,上传图片,评论,点赞,站内信,使用技术:前端使用模版FreeMarker,后台:springboot,mybatis,redis,拦截器,实现消息队列...intercepter 拦截器 configura
Struts2 Interceptor是Java Web开发中非常关键的一个概念,它是Apache Struts2框架的核心组成部分。Struts2是一个基于Model-View-Controller (MVC)架构模式的开源框架,用于构建企业级的Java web应用程序。...
Apache Cxf WebService整合Spring 处理Map、非javabean式的复合类等CXF无法自动转化的类型 CXF为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志
SpringBoot。Thymeleaf模板引擎。 数据访问层:Mybatis。 数据库:MySql。 服务器:内置Tomcat。 前端相关:jQuery,Bootstrap,Ajax,Layer等。 文件上传:OSS对象存储。 短信验证:阿里云的短信服务。 富文本编辑...
Postman Interceptor是一款强大的工具,它是Postman套件的一部分,专为Web开发者设计,用于增强API测试和调试体验。这款插件与Postman应用程序无缝集成,允许用户实时捕获和同步浏览器中的网络请求,这对于开发、...
Google插件:Sends requests fired through the Postman chrome app.
最全的InterCepter的基础,面向对象AOP的透彻分析
Heltec拦截器 有关详细信息,请参见操纵杆拦截器 Connect pins GND - GND 3.3v - 3.3v 14 - 14 12 - 12 重新映射了14和12以进行串行通信。 是的-将14连接到14-两个程序使用不同的引脚进行发送和接收,因此无需...
Flume配置文件kafkaSource 包含Intercepter,包含正则表达式。
Java开发的建站系统神器源码,目前已经有 10w+ 网站使用 JPress 进行驱动,其中包括多个政府机构,...插件被停止:该插件的所有Controller、Handler、Intercepter 自动被移除 插件被卸载:该插件的所有资源全部被删除
免费Postman和Postman interceptor压缩包,Postman为文件夹,直接选择扩展程序中的 加载已解压的扩展程序 ,选择解压后的postman文件夹即可,postman-interceptor为crx文件,直接拖入到chrome://extensions/中即可
Android渗透测试工具包
### Java实训教程知识点详解——SpringMVC拦截器 #### 一、SpringMVC概述与应用场景 SpringMVC作为Spring框架中的一个模块,主要用于构建Web应用。它是一个基于MVC(Model-View-Controller)设计模式的轻量级框架...
(1)必须实现Intercepter接口,实现interceptor方法。 (2)拦截器组件可以继承AbstractIntercepter类(实现了Intercepter接口)。 (3)拦截器组件可以继承MethodFilterIntercepter类(继承自AbstractIntercepter),...
`intercepter1`、`intercepter2`、`intercepter3`、`intercepter4` 这些文件可能是具体的拦截器实现示例或者与本文相关的代码片段。为了深入理解,你可以查看这些文件的内容,结合本文的讲解,进一步了解 MyBatis ...
`Struts2Day2_intercepter`指的是Struts2的核心特性之一——拦截器。拦截器是Struts2处理请求的一种机制,它们按照预定义的顺序执行,可以用于实现如日志记录、权限验证、事务管理等功能。通过自定义拦截器,开发者...