【问题标题】:How to configure Tomcat Realm timeout如何配置 Tomcat 领域超时
【发布时间】:2021-09-17 23:07:25
【问题描述】:

我正在使用带有基本身份验证的 Tomcat 9 和 JNDIRealm 来验证用户身份。问题是一旦用户关闭网络浏览器,他就会再次被要求输入用户名和密码。这也是根据我可以找到的 Tomcat 文档:

一旦用户通过身份验证,用户(和他或她的相关角色)就会在用户登录期间缓存在 Tomcat 中。 (对于基于 FORM 的身份验证,这意味着直到会话超时或失效;对于 BASIC 身份验证,这意味着直到用户关闭浏览器)

这种行为很烦人,因为用户每次关闭浏览器后都必须登录。我希望用户登录被缓存 1 周。只有这样才会发生对凭据的挑战。有没有办法改变这种默认行为?

【问题讨论】:

  • 这个问题用 Realm 标记,它是关系数据库 MongoDB Realm 的一部分。这是故意的吗?
  • 哎呀......这是一个错误

标签: authentication tomcat basic-authentication jndi


【解决方案1】:

在默认配置中,身份验证在 Tomcat 会话期间缓存(参见 authenticators 上的 cache 属性)。

如果您的应用程序使用HttpSessions(例如 REST API),验证器将尝试在没有它的情况下运行:

  • BASIC 身份验证器将依赖于浏览器在浏览器会话期间缓存用户提供的凭据的行为,
  • FORM 身份验证器必须使用 cookie,因此它始终会创建 Tomcat 会话。

但是,此行为是可配置的:只需在应用程序的上下文文件中设置 BasicAuthenticatoralwaysUseSession 属性(或将设置应用于所有应用程序的默认 conf/context.xml 文件):

<Context>
    <Valve
        className="org.apache.catalina.authenticator.BasicAuthenticator"
        alwaysUseSession="true"/>
    ...
</Context>

备注JSESSIONID cookie 本身默认在浏览器会话结束时过期(检查this answer),因此 Tomcat 的会话通常在您关闭浏览器时过期。您需要在应用程序的web.xml 描述符(或Tomcat 的默认conf/web.xml 文件)中配置适当的&lt;max-age&gt; 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    相关资源
    最近更新 更多