使用 azure 门户部署的开发的 Web 应用程序在 30 分钟空闲状态后会话超时

问题描述 投票:0回答:1

我希望我的会话在 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 应用程序配置任何会话超时吗?如果没有,请建议进行必要的代码更改。

javascript spring-boot azure kotlin azureportal
1个回答
0
投票

要配置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

回复:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.