如何校验登录用户是否在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
相关产品推荐
相关产品推荐

