You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Spring Security应用添加无操作自动登出计时器

Spring纯Java配置实现无操作自动登出

要实现用户无活动自动登出,需要后端Session超时配置+前端无活动检测触发登出配合完成,以下是具体步骤:

一、后端Spring Security纯Java配置

在你的SecurityConfig类中补充Session管理与登出逻辑:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // 保留你已有的登录、权限拦截等配置
            .logout()
                .logoutUrl("/logout") // 定义登出接口路径
                .logoutSuccessUrl("/login?logout") // 登出成功跳转至带提示的登录页
                .invalidateHttpSession(true) // 登出时销毁Session
                .deleteCookies("JSESSIONID") // 删除会话Cookie
                .permitAll()
            .and()
            .sessionManagement()
                .invalidSessionUrl("/login?sessionExpired") // Session失效后的跳转地址
                .maximumSessions(1) // 限制单用户仅一个有效会话
                .expiredUrl("/login?sessionExpired"); // 会话过期后的跳转地址
    }

    // 注册Session事件发布器,用于监听会话状态
    @Bean
    public ServletListenerRegistrationBean<HttpSessionEventPublisher> httpSessionEventPublisher() {
        return new ServletListenerRegistrationBean<>(new HttpSessionEventPublisher());
    }
}

同时在application.properties中配置Session超时时长(单位:秒):

server.servlet.session.timeout=1800 # 30分钟超时,可根据需求调整

二、前端无活动检测逻辑

在系统主页面(如首页、 dashboard)添加JavaScript,监听用户操作并触发超时登出:

// 设置无活动超时时间(毫秒,示例为30分钟)
const INACTIVITY_TIMEOUT = 1800000;
let timeoutTimer;

// 重置超时计时器
function resetTimeout() {
    clearTimeout(timeoutTimer);
    timeoutTimer = setTimeout(triggerLogout, INACTIVITY_TIMEOUT);
}

// 触发登出操作
function triggerLogout() {
    window.location.href = '/logout';
}

// 监听用户各类操作事件
document.addEventListener('mousemove', resetTimeout);
document.addEventListener('keypress', resetTimeout);
document.addEventListener('click', resetTimeout);
document.addEventListener('scroll', resetTimeout);

// 页面加载时启动计时器
window.onload = resetTimeout;

三、验证与注意事项

  • 测试时可临时缩短超时时间(如30秒),快速验证功能有效性
  • 确保/logout接口已通过Security配置允许匿名访问
  • 若使用AJAX请求接口,需在登出后手动处理页面跳转,避免无响应

内容的提问来源于stack exchange,提问作者Maulik Davra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 03:55:15