java - 如何使用 Java Stream 转换这段代码
问题描述
为了防御XSS攻击,我写了一个类,继承HttpServletRequestWrapper
并覆盖了该getParameterValues
方法,代码如下:
@Override
public Map<String, String[]> getParameterMap() {
Map<String, String[]> parameters = super.getParameterMap();
LinkedHashMap<String, String[]> map = new LinkedHashMap<>();
if (parameters != null) {
for (String key : parameters.keySet()) {
String[] values = parameters.get(key);
for (int i = 0; i < values.length; i++) {
String value = values[i];
if (!StrUtil.hasEmpty(value)) {
value = HtmlUtil.filter(value);
}
values[i] = value;
}
map.put(key, values);
}
}
return map;
}
我想知道是否可以使用Java Stream 转换这段代码,因为我看到了很多if
条件判断和for
循环。方法:StrUtil.hasEmpty
并HtmlUtil.filter
来自这里:Hutool
欢迎提出任何改进此代码性能的建议。
解决方案
是的,您可以使用流加上映射/过滤器来制作优雅的解决方案,但它将重新分配请求数据的内存占用,为 Map、N * Map.Entry、N * String[] 和过滤字符串和其他中间步骤。
或者考虑简化现有循环的逻辑,以将每个String[]
值固定到位并返回现有映射:
public Map<String, String[]> getParameterMap() {
Map<String, String[]> parameters = super.getParameterMap();
if (parameters != null) {
for (String[] values : parameters.values()) {
for (int i = 0; i < values.length; i++) {
String value = values[i];
if (!StrUtil.hasEmpty(value)) {
values[i] = HtmlUtil.filter(value);
}
}
}
}
return parameters;
}
推荐阅读
- typescript - 在 TypeScript 中使用代理作为 object.property 观察者
- python - 我应该怎么做才能解决这个 cv2 错误?
- php - 我可以在mac上的textedit中打开一个php文件吗
- java - 如何在 Elasticsearch 中创建层次结构
- javascript - 切换屏幕时不显示来自 asyncStorage 的项目
- java - Spring Hibernate 没有将实体映射到 PostGres 中的现有表
- python - 是否可以抑制 mypy 的“预期 TypedDict 键为字符串文字”警告?
- python - for循环遍历索引len?
- python-3.x - 如何为我的回测员实施美元追踪止损?
- ios - UIbutton忘记宽度和高度