You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验登录用户是否在properties文件配置的用户ID列表中

多用户权限校验实现方案

核心实现逻辑:将properties文件中读取到的逗号分隔多用户ID字符串拆分为列表,逐一匹配当前登录用户ID即可,同时兼容单个用户的配置场景,不需要修改原配置文件的使用习惯。

修改后的完整代码

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // 读取配置文件中的用户ID配置
    String userAttuidConfig = myApp.properties.getProperty("userId");
    // 读取当前登录用户ID
    String loggedUser = (String) request.getAttribute("attuid");

    boolean hasPermission = false;
    // 先做非空判断避免空指针异常
    if (userAttuidConfig != null && loggedUser != null) {
        // 按逗号拆分配置的用户ID列表
        String[] allowUserArr = userAttuidConfig.split(",");
        for (String allowUser : allowUserArr) {
            // 去除每个ID前后的空格,兼容配置时不小心加的空格,忽略大小写匹配
            if (loggedUser.equalsIgnoreCase(allowUser.trim())) {
                hasPermission = true;
                // 匹配到就跳出循环,不需要继续遍历
                break;
            }
        }
    }

    if (hasPermission) {
        forwardToClient("/Settings.jsp", request, response);
    } else {
        // 可替换为业务内定义的权限不足专用异常
        throw new RuntimeException("当前用户无访问权限");
    }
}

逻辑说明

  • 提前对配置值、当前登录用户ID做非空校验,避免空指针异常
  • 拆分配置字符串时自动去除每个用户ID前后的空格,兼容userId=ab123c,bv111y和userId=ab123c, bv111y两种配置写法
  • 仍然保留了原有的忽略大小写匹配逻辑,和单用户场景的校验规则保持一致

可选优化:如果你使用JDK8及以上版本,可以用Stream简化遍历判断逻辑:

boolean hasPermission = Optional.ofNullable(userAttuidConfig)
        .map(config -> config.split(","))
        .stream()
        .flatMap(Arrays::stream)
        .map(String::trim)
        .anyMatch(allowUser -> allowUser.equalsIgnoreCase(loggedUser));

内容的提问来源于stack exchange,提问作者sneha dalve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 01:57:04