我使用tomcat 9和jndirealm以及基本身份验证来验证用户。问题是,一旦用户关闭web浏览器,他将再次面临用户名和密码的挑战。这也是根据我为tomcat找到的文档:
一旦用户通过身份验证,在用户登录期间,用户(及其相关角色)将缓存在tomcat中(对于基于表单的身份验证,这意味着直到会话超时或无效为止;对于基本身份验证,这意味着直到用户关闭其浏览器)
这种行为非常烦人,因为用户每次关闭浏览器后都必须登录。我希望将用户登录缓存一周。只有在这种情况下,才能对凭证进行挑战。有没有办法改变这种默认行为?
1条答案
按热度按时间yyyllmsg1#
在默认配置中,在tomcat会话期间缓存身份验证(参见
cache
属性)。如果您的应用程序不使用
HttpSession
s(例如rest api),身份验证程序将尝试在没有它的情况下运行:这个
BASIC
验证器将依赖浏览器在浏览器会话期间缓存用户提供的凭据的行为,这个
FORM
验证器必须使用cookie,所以它总是创建一个tomcat会话。但是,此行为是可配置的:只需设置
alwaysUseSession
在你的BasicAuthenticator
在应用程序的上下文文件中(或默认conf/context.xml
要将设置应用于所有应用程序的文件):备注:
JSESSIONID
默认情况下,cookie本身在浏览器会话结束时过期(请检查此答案),因此tomcat的会话通常在关闭浏览器时过期。您需要配置适当的<max-age>
在应用程序的web.xml
描述符(或tomcat的默认值)conf/web.xml
文件)。