ession监听器HttpSessionListener

1.创建专门的session监听器HttpSessionListener
@WebListener
@Slf4j
public class SessionListener implements HttpSessionListener {
@Override
public void sessionDestroyed(HttpSessionEvent event) {
log.info(“session销毁中!”);
HttpSession session = event.getSession();
log.info(“session为:” + session);
UsernamePasswordAuthenticationToken token = (UsernamePasswordAuthenticationToken) ((SecurityContextImpl) session.getAttribute(“SPRING_SECURITY_CONTEXT”)).getAuthentication();
log.info(“token为:” + token);
Long userId = ((SysUser) token.getPrincipal()).getId();
log.info(“userId为:” + userId);
String ip = ((WebAuthenticationDetails) token.getDetails()).getRemoteAddress();
if (ip.equals(“127.0.0.1”) || ip.equals(“0:0:0:0:0:0:0:1”)) {
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip = inet.getHostAddress();
}
log.info(“ip为:” + ip);
//获取sysUserDao实例
SysUserDao sysUserDao = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()).getBean(SysUserDao.class);
sysUserDao.updateAiLoginOutTime(userId, ip);
log.info(“用户id为:” + userId + “,ip为:” + ip + “的session已销毁!”);
}

@Override
public void sessionCreated(HttpSessionEvent event) {
}

}
2.在WebMvcConfigurer中注册配置
@Configuration
public class MVCConfigurer implements WebMvcConfigurer {

@Resource
private RedisTemplate<String,Object> redisTemplate;
@Resource
private ObjectMapper jacksonObjectMapper;

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseSuffixPatternMatch(false)
            .setUseTrailingSlashMatch(true);
}


@Override
public void addInterceptors(InterceptorRegistry registry) {
    //registry.addInterceptor(vrAPPInterceptor()).addPathPatterns("/app/**").excludePathPatterns("/app/userCenter/getValidCode");
    registry.addInterceptor(new ManageInterceptor()).addPathPatterns("/manage/**");
    registry.addInterceptor(new AppInterceptor(jacksonObjectMapper, redisTemplate)).addPathPatterns("/app/**").excludePathPatterns("/app/login", "/app/versionupdate/getAppVersion");
}

//注册session监听器
@Bean
public ServletListenerRegistrationBean<SessionListener> servletListenerRegistrationBean() {
    ServletListenerRegistrationBean<SessionListener> slrBean = new ServletListenerRegistrationBean<SessionListener>();
    slrBean.setListener(new SessionListener());
    return slrBean;
}

}
3.监听器里面无法直接调用spring管理bean
//获取sysUserDao实例
SysUserDao sysUserDao = WebApplicationContextUtils.getWebApplicationContext(session.getServletContext()).getBean(SysUserDao.class);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值