springboot 监听所有异常_Springboot项目监听器失效问题解决

本文介绍了在Springboot项目中如何监听所有异常,特别是针对监听器失效的问题进行了解决。作者通过实现HttpSessionListener并在Shiro配置中添加自定义监听器,成功解决了在特定操作后需要强制受影响用户退出并重新登录的需求。详细过程包括了代码实现和问题排查,最终确认是由于Shiro重写session机制导致的问题,并通过调整配置使监听器正常工作。
摘要由CSDN通过智能技术生成

1.使用springboot项目,现在有个需求是在添加或者修改某个菜单后,菜单会影响角色,角色影响用户。所有受影响的用户在要退出重新登录。

自己实现的思路是这样的:写一个监听器,在收到某个特定的请求后,监听当前所有的用户,如果是受影响的用户,就销毁session,让重新登录。

有了思路后,刚开始上网搜的是怎么在spring boot中添加监听:网上大部分的思路都一样:使用@ServletComponentScan和一个实现了HttpSessionListener的方法就可以了。但是自己按照这个配置了后,一直不起作用。启动时候能debug到这个自定义的监听里面,但是登录后缺不能实现

sessionCreated()

package com.listener;

import javax.servlet.annotation.WebListener;

import javax.servlet.http.HttpSessionEvent;

import javax.servlet.http.HttpSessionListener;

/**

* session监听器

* @author Administrator

*/

@WebListener

public class SessionListener implements HttpSessionListener{

private int onlineCount = 0;//记录session的数量

/**

* session创建后执行

*/

@Override

public void sessionCreated(HttpSessionEvent se) {

onlineCount++;

System.out.println("【HttpSessionListener监听器】 sessionCreated, onlineCount:" + onlineCount);

se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);

}

/**

* session失效后执行

*/

@Override

public void sessionDestroyed(HttpSessionEvent se) {

if (onlineCount > 0) {

onlineCount--;

}

System.out.println("【HttpSessionListener监听器】 sessionDestroyed, onlineCount:" + onlineCount);

se.getSession().getServletContext().setAttribute("onlineCount", onlineCount);

}

}

还问了群里的大神帮忙看了下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值