Azure部署的企业Microsoft账号登录Web应用30分钟闲置会话超时问题
企业Microsoft账号登录的Azure Web应用会话超时配置方案
能否仅通过Azure门户配置会话超时?
不能。Azure应用服务门户的「配置>常规设置」中的会话超时,仅针对Azure托管的会话存储(如Redis、文件系统),无法覆盖Spring Boot自身的Servlet会话管理配置。此外,由于你的应用使用企业Microsoft账号登录(基于OAuth2/OIDC),还需处理身份提供商的令牌过期逻辑,这部分Azure门户无法直接配置。
现有配置的问题修正
你当前的application.yaml存在层级错误,session.cookie.max-age应归属到server.servlet.session节点下,否则配置不生效。修正后的配置如下:
# Session timeout server: servlet: session: timeout: 30m cookie: max-age: 30m
另外,你自定义的Session类型Bean是冗余的,Spring Boot会自动读取上述配置并应用会话超时,无需手动创建该Bean,可直接删除。
针对Microsoft身份验证的代码修改
由于应用依赖Microsoft企业账号登录,需结合Spring Security OAuth2配置会话管理与令牌过期处理,确保闲置30分钟后彻底登出:
1. 配置Spring Security会话与登出策略
import org.springframework.context.annotation.Bean import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity import org.springframework.security.web.SecurityFilterChain import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy import org.springframework.security.web.session.HttpSessionEventPublisher @EnableWebSecurity class SecurityConfig { @Bean fun securityFilterChain(http: HttpSecurity): SecurityFilterChain { http .authorizeHttpRequests { auth -> auth.anyRequest().authenticated() } .oauth2Login { oauth2 -> // 此处保留你已有的Microsoft OAuth2客户端配置(如clientId、clientSecret等) } .logout { logout -> logout .logoutSuccessUrl("/") .invalidateHttpSession(true) // 会话过期时销毁HttpSession .deleteCookies("JSESSIONID", "SESSION") // 清除会话相关Cookie .clearAuthentication(true) // 清除身份验证信息 } .sessionManagement { session -> session .invalidSessionUrl("/login") // 会话失效后跳转登录页 .expiredUrl("/login?expired=true") // 会话过期后跳转带提示的登录页 .maximumSessions(1) // 可选:限制单用户仅能登录一次 } return http.build() } // 确保会话创建时正确注册 @Bean fun sessionAuthenticationStrategy(): SessionAuthenticationStrategy { return RegisterSessionAuthenticationStrategy() } // 监听会话销毁事件,保证会话过期逻辑触发 @Bean fun httpSessionEventPublisher(): HttpSessionEventPublisher { return HttpSessionEventPublisher() } }
2. 处理Microsoft令牌过期
Microsoft默认ID令牌过期时间为1小时,需配置令牌自动刷新或在会话超时后强制重新登录:
- 若已配置
refresh-token授权类型,Spring Security OAuth2会自动尝试刷新令牌; - 结合上述会话配置,当Servlet会话30分钟超时后,会清除本地身份验证信息,用户刷新页面时会被引导至Microsoft登录页重新认证。
验证配置生效
- 打开浏览器开发者工具,查看
JSESSIONIDCookie的过期时间是否为30分钟; - 闲置30分钟后刷新页面,确认是否需重新登录;
- 查看应用日志,搜索
SessionDestroyedEvent关键字,确认会话过期时是否触发销毁事件。
内容的提问来源于stack exchange,提问作者Krutika Pawar
相关产品推荐
相关产品推荐

