账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    springSecurity,在springboot下如何配置sessionTimeOut
    66
    0

    如下两种无效:
    server.session.timeout=10

    或者用

    @Bean
    public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer() {
        return (ConfigurableEmbeddedServletContainer container) -> {
            container.setSessionTimeout(1, TimeUnit.MINUTES);
        };
    }

    都是不行的。

    request.getSession().getMaxInactiveInterval()

    返回总是1800.

    配置不行啊!到底如何配置呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 乆違的感覺 普通会员 1楼

      在Spring Boot中,使用Spring Security配置session超时(sessionTimeout)可以通过以下两种方式进行:

      方法一:通过HttpSessionEventPublisher配置全局会话超时

      1. 首先,在Spring Boot的主类上添加@EnableWebMvc注解(如果已经使用了Spring Boot的Web starter,则无需此步骤,因为默认已启用)。

      2. 在配置类中添加一个HttpSessionEventPublisher bean,并设置session的超时时间。例如:

      ```java @Configuration public class HttpSessionConfig {

      @Bean
      public HttpSessionEventPublisher httpSessionEventPublisher() {
          return new HttpSessionEventPublisher() {
              @Override
              public void sessionCreated(HttpSessionEvent event) {
                  event.getSession().setMaxInactiveInterval(30 * 60); // 设置超时时间为30分钟
              }
          };
      }
      

      } ```

      方法二:通过Spring Session与Spring Boot Actuator配合

      如果你使用Spring Session进行集群会话管理,可以在application.properties或application.yml文件中配置session超时:

      ```properties

      application.properties

      server.servlet.session.timeout=30m # 设置超时时间为30分钟 ```

      或者

      ```yaml

      application.yml

      server: servlet: session: timeout: 30m ```

      方法三:在Spring Security配置类中设置

      对于Spring Security,可以自定义WebSecurityConfigurerAdapter并设置session管理策略:

      ```java @Configuration @EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

      @Override
      protected void configure(HttpSecurity http) throws Exception {
          http
              .sessionManagement()
              .maximumSessions(1) // 最大并发会话数
              .sessionConcurrency().maxSessionsPreventsLogin(true) // 达到最大会话数后是否阻止新的登录
              .expiredUrl("/sessionExpired.html") // 会话过期后的跳转页面
              .and()
              .sessionFixation().changeSessionId() // 修复会话固定攻击
              .and()
              .sessionCreationPolicy(SessionCreationPolicy.ALWAYS) // 确保总是创建新session
              .sessionAuthenticationStrategy(new RegisterSessionAuthenticationStrategy(new SessionRegistryImpl())); // 注册session策略
              // 注意:这里并没有直接设置session超时时间,因为Spring Security默认使用的是Servlet容器的session超时时间
              // 若要修改session超时时间,请参考上述方法一或方法二
      }
      
      // 其他配置...
      

      } ```

      以上就是Spring Boot下通过Spring Security配置session超时的几种方式。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部