【问题标题】:How to set session timeout with spring boot embedded tomcat如何使用 Spring Boot 嵌入式 tomcat 设置会话超时
【发布时间】:2016-12-03 00:51:31
【问题描述】:

我无法在我的 Jhipster WebApp 中设置会话超时(spring boot + Spring security + angularJS)

我只是做了最简单的方法:

...
/**
 * Configuration of web application with Servlet 3.0 APIs.
 */
@Configuration
public class WebConfigurer implements ServletContextInitializer, EmbeddedServletContainerCustomizer
{
 ....
@Inject
    private ServerProperties serverProperties;
....
/**
     * Set up Mime types.
     */
    @Override
    public void customize(ConfigurableEmbeddedServletContainer container)
    {
        MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT);
        // IE issue, see https://github.com/jhipster/generator-jhipster/pull/711
        mappings.add("html", "text/html;charset=utf-8");
        // CloudFoundry issue, see https://github.com/cloudfoundry/gorouter/issues/64
        mappings.add("json", "text/html;charset=utf-8");
        container.setSessionTimeout(serverProperties.getSession().getTimeout(), TimeUnit.MINUTES);
        log.info("SessionTimeout = {}", serverProperties.getSession().getTimeout());
        container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/login"));
        container.setMimeMappings(mappings);
    }
...

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties
{
    private Session session = new Session();

    public static class Session
    {
        private int timeout = 6;

        public int getTimeout()
        {
            return timeout;
        }

        public void setTimeout(int timeout)
        {
            this.timeout = timeout;
        }

    }

    public Session getSession()
    {
        return session;
    }

    public void setSession(Session session)
    {
        this.session = session;
    }

}

Application.yml

server:
    port: 8080
    session:
      timeout: 1 

日志通知会话长度为 1 分钟:

2016-07-28 16:17:03.103  INFO 6248 --- [  restartedMain] com.tess2i.config.WebConfigurer          : SessionTimeout = 1   

启动WebApp后,我登录了WebApp,然后等了1分钟多。然后我点击某处查询服务器。一切仍在工作。没有会话错误/重定向。

还有什么需要做的?

【问题讨论】:

  • 不需要您的自定义实现 - 默认使用 server.session.timeout 属性。你确定你没有使用 JWT 身份验证吗?还是启用了记住我功能?
  • 根据文档,该属性的单位是秒。 server.session.timeout = #会话超时以秒为单位。 docs.spring.io/spring-boot/docs/current/reference/html/…

标签: angularjs spring-security spring-boot session-timeout jhipster


【解决方案1】:

首先,您不需要提供任何自定义实现,设置server.session.timeout 应该通过开箱即用的Spring Boot 支持,请参阅the official documentation 了解更多详细信息。

就超时和重定向而言,您确定您没有使用 remember-me 或 JWT 身份验证或其他不依赖 HTTP 会话及其到期的身份验证方法吗?

【讨论】:

  • 是的,你是对的,在 jhispter 中有一个记住我的身份验证。但我只是像这样添加了令牌有效性: http.csrf().and().addFilterAfter(new CsrfCookieGeneratorFilter(), CsrfFilter.class).exceptionHandling() .accessDeniedHandler(new CustomAccessDeniedHandler()).authenticationEntryPoint(authenticationEntryPoint) .and ().rememberMe() .rememberMeServices(rememberMeServices).rememberMeParameter("remember-me").tokenValiditySeconds(10).key(env.getProperty("jhipster.security.rememberme.key")).and() 。 .....但没有任何改变
  • 嗯,这完全是一个不同的问题,与当前问题无关 - 您能否针对该场景打开另一个问题并提供更详细的代码示例?对于这个问题,我建议您禁用记住我的身份验证并验证会话超时是否有效。
猜你喜欢
  • 2016-02-10
  • 2015-04-13
  • 2018-02-22
  • 2017-04-19
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 2015-10-06
相关资源
最近更新 更多