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
1你可以在自己的日志中看到自己接口的出参和入参,同时你不用在每个接口中写打印的逻辑,直接交给拦截器完成。 2你可以任意包装你的出参,比如加上消耗的时间,添加一个唯一的uuid等等,同时这些东西都是由拦截器...
项目总结 (牛客网学习)头条资讯,包含登录注册,添加资讯,上传图片,评论,点赞,站内信,使用技术:前端使用模版FreeMarker,后台:springboot,mybatis,redis,拦截器,实现消息队列...intercepter 拦截器 configura
NULL 博文链接:https://zw7534313.iteye.com/blog/430551
Apache Cxf WebService整合Spring 处理Map、非javabean式的复合类等CXF无法自动转化的类型 CXF为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志
SpringBoot。Thymeleaf模板引擎。 数据访问层:Mybatis。 数据库:MySql。 服务器:内置Tomcat。 前端相关:jQuery,Bootstrap,Ajax,Layer等。 文件上传:OSS对象存储。 短信验证:阿里云的短信服务。 富文本编辑...
chromecj.com-Postman-Interceptor_v0.2.23.crx 离线版本测试
Google插件:Sends requests fired through the Postman chrome app.
Heltec拦截器 有关详细信息,请参见操纵杆拦截器 Connect pins GND - GND 3.3v - 3.3v 14 - 14 12 - 12 重新映射了14和12以进行串行通信。 是的-将14连接到14-两个程序使用不同的引脚进行发送和接收,因此无需...
最全的InterCepter的基础,面向对象AOP的透彻分析
Flume配置文件kafkaSource 包含Intercepter,包含正则表达式。
Java开发的建站系统神器源码,目前已经有 10w+ 网站使用 JPress 进行驱动,其中包括多个政府机构,...插件被停止:该插件的所有Controller、Handler、Intercepter 自动被移除 插件被卸载:该插件的所有资源全部被删除
免费Postman和Postman interceptor压缩包,Postman为文件夹,直接选择扩展程序中的 加载已解压的扩展程序 ,选择解压后的postman文件夹即可,postman-interceptor为crx文件,直接拖入到chrome://extensions/中即可
(1)必须实现Intercepter接口,实现interceptor方法。 (2)拦截器组件可以继承AbstractIntercepter类(实现了Intercepter接口)。 (3)拦截器组件可以继承MethodFilterIntercepter类(继承自AbstractIntercepter),...
主要介绍了Java servlet、filter、listener、interceptor之间的区别和联系的相关资料,需要的朋友可以参考下
:warning: 该项目现在是EE4J计划的一部分。 该仓库已被归档,因为所有活动现在都在。 有关整体EE4J过渡状态,请参见。javax.interceptor javax.interceptor API的存储库
SpringMVC+ExtJS完美集成(数据传输方式为JSON和model),同时还支持controller页面配置、页面消息可配置(类似于国际化)、intercepter示例。
主要介绍了浅谈SpringMVC中Interceptor和Filter区别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果...