如何配置tomcat领域超时

ldxq2e6h  于 2021-10-10  发布在  Java
关注(0)|答案(1)|浏览(425)

我使用tomcat 9和jndirealm以及基本身份验证来验证用户。问题是,一旦用户关闭web浏览器,他将再次面临用户名和密码的挑战。这也是根据我为tomcat找到的文档:
一旦用户通过身份验证,在用户登录期间,用户(及其相关角色)将缓存在tomcat中(对于基于表单的身份验证,这意味着直到会话超时或无效为止;对于基本身份验证,这意味着直到用户关闭其浏览器)
这种行为非常烦人,因为用户每次关闭浏览器后都必须登录。我希望将用户登录缓存一周。只有在这种情况下,才能对凭证进行挑战。有没有办法改变这种默认行为?

yyyllmsg

yyyllmsg1#

在默认配置中,在tomcat会话期间缓存身份验证(参见 cache 属性)。
如果您的应用程序不使用 HttpSession s(例如rest api),身份验证程序将尝试在没有它的情况下运行:
这个 BASIC 验证器将依赖浏览器在浏览器会话期间缓存用户提供的凭据的行为,
这个 FORM 验证器必须使用cookie,所以它总是创建一个tomcat会话。
但是,此行为是可配置的:只需设置 alwaysUseSession 在你的 BasicAuthenticator 在应用程序的上下文文件中(或默认 conf/context.xml 要将设置应用于所有应用程序的文件):

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

备注: JSESSIONID 默认情况下,cookie本身在浏览器会话结束时过期(请检查此答案),因此tomcat的会话通常在关闭浏览器时过期。您需要配置适当的 <max-age> 在应用程序的 web.xml 描述符(或tomcat的默认值) conf/web.xml 文件)。

相关问题