删除名称以特定名称开头的会话属性

Remove session attributes which name starts from specific name

在我的 servlet 中,如果我想删除特定的 session 属性,我 运行:

session.removeAttribute("user");

我想删除所有这些:

session.invalidate();

如何只删除名称以特定值开头的那些会话属性?例如改为 运行ning:

session.removeAttribute("userDsdf");
session.removeAttribute("userSDFSF");
session.removeAttribute("userVSDfs");
session.removeAttribute("userESFDFS");

运行 类似于 session.removeAttribute("user%");

没有方法可以准确地完成这项工作,但您可以通过枚举属性和过滤自己完成:

Enumeration<String> attributes = session.getAttributeNames();
while (attributes.hasMoreElements()) {
    String next = attributes.nextElement();
    if (!next.startsWith("user")) continue;
    session.removeAttribute(next);
}

您可以使用流遍历属性名称:

Collections.list(session.getAttributeNames()).stream()
        .filter(a -> a.startsWith("user"))
            .forEach(a -> session.removeAttribute(a));