假设我们有这样一个需求,需要判定配置的 OAuth2 授权类型,是否都在有效范围内。OAuth2 的授权类型只能是这五种:"refresh_token",
"password", "client_credentials", "authorization_code", "implicit",因为用户可以配置的值可能不在这五种授权类型中,所以需要判定。
removeAll(Collection<?>c)方法用于从列表中移除指定 collection 中包含的所有元素,我们可以利用这个方法来进行判定。
首先定义支持的授权类型:
/**
* 支持的授权类型
*/
public static final List<String> GRANT_TYPES = Arrays.asList(new String[]{"refresh_token",
"password", "client_credentials", "authorization_code", "implicit"});
接着把用户所传入的授权类型放入新的列表 temp,然后使用removeAll() 移除掉支持的授权类型,如果列表 temp 不为空,则所以存在超出范围的授权类型,因此直接抛出异常:
List<String> temp = new ArrayList<>(grantTypes);
temp.removeAll(GRANT_TYPES);
if (!temp.isEmpty()) {
throw new IllegalArgumentException("OAuths2 账户名 [" + name + "] " +
"下的授权类型只能是这些类型:" + GRANT_TYPES);
}
网友评论