我希望我的会话在 30 分钟不活动后过期。只有使用公司 ID(即 Microsoft 帐户 ID)登录后才能使用 Web 应用程序。该应用程序部署在 Azure 门户上。
我在application.yaml中实现了以下代码。在此之前,我尝试了互联网上的多种选择,但都没有成功。我什至尝试删除 cookie 和会话,以及网上找到的各种其他建议,但没有成功。
# Session timeout
server:
servlet:
session:
timeout: 30m
session:
cookie:
max-age: 30m
@Bean
fun sessionConfig(): Session {
val session = Session()
session.timeout = Duration.ofMinutes(30)
return session
}
会话应该过期。需要哪些代码更改或新的实现?我们可以仅使用 Azure 门户为已部署的 Web 应用程序配置任何会话超时吗?如果没有,请建议进行必要的代码更改。
要配置Session Timeout,Spring Security是Spring boot应用程序中的最佳选择,请参阅文章。
此过程会在指定的不活动时间后使会话失效,并降低与无人值守会话相关的安全风险,并增强应用程序的安全性。
配置类:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.session.HttpSessionEventPublisher;
@Configuration
@EnableWebSecurity
public class SpringSecurity {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.sessionManagement(session -> session
.maximumSessions(1)
.maxSessionsPreventsLogin(true)
)
.headers(headers -> headers
.httpStrictTransportSecurity(Customizer.withDefaults())
)
.sessionManagement(session -> session
.sessionFixation().migrateSession()
.sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
.enableSessionUrlRewriting(false)
);
return http.build();
}
@Bean
public HttpSessionEventPublisher httpSessionEventPublisher() {
return new HttpSessionEventPublisher();
}
}
我已使用以下代码将会话超时配置为 30 分钟:
public class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws IOException, ServletException, ServletException {
request.getSession().setMaxInactiveInterval(1800); //30 minutes (in seconds)
super.onAuthenticationSuccess(request, response, authentication);
}
}
应用程序属性:
server.servlet.session.timeout=30m
回复: