字符串之间用分号分割,如果比较时未引入分隔符会引起bug

场景如下:

1
2
3
4
5
6
7
boolean pcLoginByCode = false; //是否包含
String vcodeLoginDomain = xx; //读取数据库里的一个配置,如 aa;bb;cc;
if (StringUtils.isValid(vcodeLoginDomain)
&& StringUtils.isValid(domain.getName())
&& vcodeLoginDomain.contains(domain.getName())) {//比较时没有加入分隔符 如 aa;bb;cc 包含a 引入bug
pcLoginByCode = true;
}

解决方法,改变算法,先切分再比较

代码如下:

1
2
3
4
5
6
7
8
boolean pcLoginByCode = false; //是否包含
String vcodeLoginDomain = xx; //数据库里的设置 aa;bb;cc
List domainList = Arrays.asList(StringUtils.split(vcodeLoginDomain, ";")); //切分设置,分装成列表 ["aa", "bb", "cc"]
if (!CollectionUtils.isEmpty(domainList) //判断设置不为空
&& StringUtils.isValid(domain.getName()) //判断比较的值不为空
&& domainList.contains(domain.getName())) {//使用列表包含,更清晰
pcLoginByCode = true;
}