From b08e6be68d743ab4520c06a9518d15a94301fd8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yvan-=E6=AC=A7=E9=98=B3=E5=B8=86?= Date: Fri, 28 Oct 2022 11:18:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?REPORT-80693=20-=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=84=B1=E6=95=8F=E4=BA=8C=E6=9C=9F=EF=BC=88=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=EF=BC=89=20=E3=80=90=E9=97=AE=E9=A2=98=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=E3=80=91rt=20=E3=80=90=E6=94=B9=E5=8A=A8=E6=80=9D=E8=B7=AF?= =?UTF-8?q?=E3=80=91=E8=AF=A6=E8=A7=81https://kms.fineres.com/pages/viewpa?= =?UTF-8?q?ge.action=3FpageId=3D550539157=20=E3=80=90review=E5=BB=BA?= =?UTF-8?q?=E8=AE=AE=E3=80=91=E6=96=87=E6=A1=A3=E5=BF=98=E8=AE=B0=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E8=AF=84=E5=AE=A1=E4=BA=86=EF=BC=8Creview=E7=9A=84?= =?UTF-8?q?=E6=97=B6=E5=80=99=E5=B8=AE=E5=BF=99=E6=89=93=E4=B8=AA=E5=88=86?= =?UTF-8?q?=EF=BC=8C=E6=84=9F=E8=B0=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datapane/preview/PreviewTableModel.java | 13 +++ .../datapane/preview/PreviewTablePane.java | 2 +- .../TableDataPreviewDesensitizeManager.java | 51 +++++------ .../model/DesensitizedPreviewTableModel.java | 26 +++--- .../rule/DesensitizationRuleChoosePane.java | 3 + .../rule/DesensitizationRuleDebugPane.java | 2 +- .../rule/DesensitizationRuleEditPane.java | 10 +-- .../TableDataDesensitizationSettingPane.java | 12 +-- .../TableDataDesensitizationTableModel.java | 89 +++++++------------ .../TableDataDesensitizationTablePane.java | 8 +- 10 files changed, 99 insertions(+), 117 deletions(-) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTableModel.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTableModel.java index 49ce4ba42..9074a18d6 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTableModel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTableModel.java @@ -116,6 +116,19 @@ public class PreviewTableModel extends AbstractTableModel { } } + /** + * 根据列名获取列序号,当返回-1时代表异常,异常会被忽略,不打印日志或给出前台提示 + * @param columnName + * @return + */ + public int getColumnIndexWithExceptionIngore(String columnName) { + try { + return dataModel.getColumnIndex(columnName); + } catch (TableDataException ingore) { + return -1; + } + } + public int getRowCount() { try { return this.dataModel.getRowCount(); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java index dc3bc6ed8..b701112f5 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/PreviewTablePane.java @@ -776,6 +776,6 @@ public class PreviewTablePane extends BasicPane { */ private boolean isDesensitizeOpened() { return tableData instanceof DesensitizationTableData && - ((DesensitizationTableData) tableData).isDesensitizeOpen(); + ((DesensitizationTableData) tableData).getDesensitizationConfig().isDesensitizeOpened(); } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java index 0632de3e6..ed5104fbc 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java @@ -3,7 +3,7 @@ package com.fr.design.data.datapane.preview.desensitization; import com.fr.base.TableData; import com.fr.data.desensitize.base.DesensitizationTableData; -import com.fr.data.desensitize.base.TableDataDesensitizationBean; +import com.fr.data.desensitize.base.TableDataDesensitizationItem; import com.fr.data.desensitize.manage.DesensitizationManager; import com.fr.data.desensitize.util.DesentizationUtils; import com.fr.decision.webservice.bean.user.DepartmentPostBean; @@ -14,12 +14,10 @@ import com.fr.decision.webservice.v10.user.PositionService; import com.fr.design.data.DesignTableDataManager; import com.fr.design.data.datapane.preview.PreviewTableModel; import com.fr.design.data.datapane.preview.desensitization.model.DesensitizedPreviewTableModel; -import com.fr.design.data.tabledata.wrapper.TableDataWrapper; import com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.stable.StringUtils; -import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; import java.util.LinkedHashMap; @@ -57,14 +55,14 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage /** * 判断数据集预览时是否需要脱敏,这里不需要判断roleIds,因为默认有权限编辑的人一定有权限看脱敏前后字段值 + * 只需要保证此数据集存在脱敏配置就行 * * @param tableData * @return */ public boolean needDesensitize(TableData tableData) { return tableData instanceof DesensitizationTableData && - DesentizationUtils.isCollectionNotEmpty(((DesensitizationTableData) tableData).getDesensitizationBeans()) && - ((DesensitizationTableData) tableData).getDesensitizationBeans().stream().noneMatch(TableDataDesensitizationBean::invalid); + DesentizationUtils.isCollectionNotEmpty(((DesensitizationTableData) tableData).getDesensitizationConfig().getDesensitizationItems()); } /** @@ -75,25 +73,23 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage */ public PreviewTableModel desensitizeTableModel(TableData tableData, PreviewTableModel model) { - Map desensitizationBeanMap = new LinkedHashMap<>(); + Map desensitizationItemMap = new LinkedHashMap<>(); // 获取此数据集的所有脱敏信息 - Collection desensitizationBeans = ((DesensitizationTableData) tableData).getDesensitizationBeans(); - // 去除被禁用的规则 + 排序 - List sortedBeans = desensitizationBeans - .stream() - .filter(bean -> bean.getDesensitizationRule().isEnable()) - .sorted(Comparator.comparingInt(TableDataDesensitizationBean::getColumnIndex)) - .collect(Collectors.toList()); - int columnIndex = 0; - for (TableDataDesensitizationBean sortedBean : sortedBeans) { - // 当map中已包含列序号时,代表对这一列设置了不同的脱敏规则,将key + 1 - if (desensitizationBeanMap.containsKey(columnIndex)) { - columnIndex++; + Collection desensitizationItems = ((DesensitizationTableData) tableData).getDesensitizationConfig().getDesensitizationItems(); + if (DesentizationUtils.isCollectionNotEmpty(desensitizationItems)) { + // 先对脱敏配置项集合做过滤和排序处理 + List items = desensitizationItems.stream() + .filter(item -> item.getRule().isEnable() && + matchColumnIndex(item, model) >= 0) + .sorted(Comparator.comparingInt(item -> matchColumnIndex(item, model))) + .collect(Collectors.toList()); + // 然后转换成Map + for (int i = 0; i < items.size(); i++) { + desensitizationItemMap.put(i, items.get(i)); } - desensitizationBeanMap.put(columnIndex, sortedBean); } // 包装TableModel - return new DesensitizedPreviewTableModel(model, desensitizationBeanMap); + return new DesensitizedPreviewTableModel(model, desensitizationItemMap); } /** @@ -104,16 +100,7 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage * @return */ public List getColumnNamesByTableData(TableData tableData) { - List> editingDataSet = DesignTableDataManager.getEditingDataSet(DesignTableDataManager.getEditingTableDataSource()); - // 当前所有模板数据集Wrapper,不包括存储过程 - Map templeteDataMap = editingDataSet.get(0); - // 当前所有模板数据集Wrapper,包括存储过程 - Map dataWrapperMap = DesignTableDataManager.getAllDataSetIncludingProcedure(templeteDataMap); - // 找到匹配当前数据集名称的Wrapper - TableDataWrapper tableDataWrapper = dataWrapperMap.get(tableData.getName()); - return tableDataWrapper == null ? - new ArrayList<>() : - tableDataWrapper.calculateColumnNameList(); + return DesignTableDataManager.getColumnNamesByTableData(tableData); } /** @@ -189,4 +176,8 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage public String mergeRoleId(String departmentId, String positionId) { return departmentId + CONNECTOR + positionId; } + + public int matchColumnIndex(TableDataDesensitizationItem desensitizationItem, PreviewTableModel previewModel) { + return previewModel.getColumnIndexWithExceptionIngore(desensitizationItem.getColumnName()); + } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/model/DesensitizedPreviewTableModel.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/model/DesensitizedPreviewTableModel.java index e3598e39c..d8908fd14 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/model/DesensitizedPreviewTableModel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/model/DesensitizedPreviewTableModel.java @@ -1,10 +1,11 @@ package com.fr.design.data.datapane.preview.desensitization.model; -import com.fr.data.desensitize.base.TableDataDesensitizationBean; +import com.fr.data.desensitize.base.TableDataDesensitizationItem; import com.fr.data.desensitize.calculate.DesensitizationCalculator; import com.fr.data.desensitize.rule.base.DesensitizationRule; import com.fr.design.data.datapane.preview.PreviewTableModel; +import com.fr.design.data.datapane.preview.desensitization.TableDataPreviewDesensitizeManager; import java.util.Map; import java.util.Objects; @@ -26,20 +27,20 @@ public class DesensitizedPreviewTableModel extends PreviewTableModel { /** * 脱敏后新组装的TableModel中,列序号 - 脱敏信息 对应的Map */ - private Map desensitizationBeanMap; + private Map desensitizationItemMap; private boolean needDesensitize = false; - public DesensitizedPreviewTableModel(PreviewTableModel previewTableModel, Map desensitizationBeanMap) { + public DesensitizedPreviewTableModel(PreviewTableModel previewTableModel, Map desensitizationItemMap) { this.previewTableModel = previewTableModel; - this.desensitizationBeanMap = desensitizationBeanMap; + this.desensitizationItemMap = desensitizationItemMap; } @Override public String getColumnName(int column) { - int originIndex = needDesensitize && Objects.nonNull(desensitizationBeanMap.get(column)) ? - desensitizationBeanMap.get(column).getColumnIndex() : column; - return previewTableModel.getColumnName(originIndex); + return needDesensitize ? + desensitizationItemMap.get(column).getColumnName() : + previewTableModel.getColumnName(column); } @Override @@ -56,7 +57,7 @@ public class DesensitizedPreviewTableModel extends PreviewTableModel { @Override public Object getValueAt(int rowIndex, int columnIndex) { - return needDesensitize && Objects.nonNull(desensitizationBeanMap.get(columnIndex)) ? + return needDesensitize && Objects.nonNull(desensitizationItemMap.get(columnIndex)) ? getDesensitizedValue(rowIndex, columnIndex) : previewTableModel.getValueAt(rowIndex, columnIndex); } @@ -70,7 +71,7 @@ public class DesensitizedPreviewTableModel extends PreviewTableModel { */ private Object getDesensitizedValue(int rowIndex, int columnIndex) { // 先通过columnIndex找到对应原TableModel的列序号 - int originColumnIndex = desensitizationBeanMap.get(columnIndex).getColumnIndex(); + int originColumnIndex = TableDataPreviewDesensitizeManager.getInstance().matchColumnIndex(desensitizationItemMap.get(columnIndex), previewTableModel); // 获取原值 Object value = previewTableModel.getValueAt(rowIndex, originColumnIndex); // 判空 @@ -91,9 +92,8 @@ public class DesensitizedPreviewTableModel extends PreviewTableModel { * @return */ private String desensitizeValue(String strValue, int columnIndex) { - TableDataDesensitizationBean desensitizationBean = desensitizationBeanMap.get(columnIndex); - DesensitizationRule desensitizationRule = desensitizationBean.getDesensitizationRule(); - return DesensitizationCalculator.getInstance().desensitize(strValue, desensitizationRule); + DesensitizationRule rule = desensitizationItemMap.get(columnIndex).getRule(); + return DesensitizationCalculator.getInstance().desensitize(strValue, rule); } /** @@ -102,7 +102,7 @@ public class DesensitizedPreviewTableModel extends PreviewTableModel { * @return */ public int getDesensitizeColumnsCount() { - return desensitizationBeanMap.size(); + return desensitizationItemMap.size(); } /** diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java index 16900defa..fd627e8cc 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleChoosePane.java @@ -305,6 +305,9 @@ public class DesensitizationRuleChoosePane extends JPanel { public void actionPerformed(ActionEvent e) { // 获取当前选中规则 DesensitizationRule selectedRule = getSelectedValue(); + if (selectedRule == null) { + return; + } DesensitizationRuleDebugPane ruleDebugPane = new DesensitizationRuleDebugPane(selectedRule); BasicDialog ruleDebugDialog = ruleDebugPane.showWindowWithCustomSize(SwingUtilities.getWindowAncestor(parent), null, BasicDialog.DEFAULT); ruleDebugDialog.setVisible(true); diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleDebugPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleDebugPane.java index 5f74dee9c..eba6d1089 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleDebugPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleDebugPane.java @@ -52,7 +52,7 @@ public class DesensitizationRuleDebugPane extends BasicPane { JPanel panel = FRGUIPaneFactory.createBorderLayout_S_Pane(); panel.setBorder(BorderFactory.createEmptyBorder(20, 10, 0, 0)); UILabel desensitizationRule = new UILabel(Toolkit.i18nText("Fine-Design_Report_Desensitization_Rule_Algorithm")); - UILabel characterReplace = new UILabel(rule.getRuleType().getTypeName()); + UILabel characterReplace = new UILabel(rule.getRuleType().getRuleTypeName()); UILabel description = new UILabel(DesensitizationRule.getDescription(rule)); JComponent[][] components = new JComponent[][]{ {desensitizationRule, characterReplace}, diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java index 2f526f4b8..7354dc0b1 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/rule/DesensitizationRuleEditPane.java @@ -185,8 +185,8 @@ public class DesensitizationRuleEditPane extends BasicBeanPane tableDataDesensitizationBeans) { - tableData.setDesensitizationBeans(tableDataDesensitizationBeans); + public void saveDesensitizationBeans(List desensitizationItems) { + tableData.getDesensitizationConfig().setDesensitizationItems(desensitizationItems); } } diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java index c43795ac9..bbc91efa2 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/view/setting/TableDataDesensitizationTableModel.java @@ -1,7 +1,7 @@ package com.fr.design.data.datapane.preview.desensitization.view.setting; import com.fr.data.desensitize.base.DesensitizationTableData; -import com.fr.data.desensitize.base.TableDataDesensitizationBean; +import com.fr.data.desensitize.base.TableDataDesensitizationItem; import com.fr.data.desensitize.rule.base.DesensitizationRule; import com.fr.design.data.datapane.preview.desensitization.TableDataPreviewDesensitizeManager; import com.fr.design.data.datapane.preview.desensitization.view.rule.DesensitizationRulePane; @@ -18,7 +18,6 @@ import com.fr.design.i18n.Toolkit; import com.fr.design.layout.TableLayout; import com.fr.design.layout.TableLayoutHelper; import com.fr.stable.StringUtils; -import com.fr.stable.collections.CollectionUtils; import org.jetbrains.annotations.Nullable; import javax.swing.AbstractCellEditor; @@ -33,6 +32,7 @@ import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; @@ -48,7 +48,7 @@ import java.util.Set; * @version 11.0 * Created by Yvan on 2022/9/23 */ -public class TableDataDesensitizationTableModel extends UITableModelAdapter { +public class TableDataDesensitizationTableModel extends UITableModelAdapter { private static final String APOSTROPHE = "..."; @@ -106,59 +106,32 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter= 0 && columnIndex < columnNames.size(); - } - /** * 通过id匹配此用户组对应的部门职位名称(或者说自定义角色名称) * * @param roleIds * @return */ - private List matchRoleNamesByIds(Set roleIds) { + private List matchRoleNamesByIds(Collection roleIds) { List result = new ArrayList<>(); for (String roleId : roleIds) { if (roleMap != null && roleMap.containsKey(roleId)) { @@ -184,7 +157,7 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter generateRolesCheckBoxSelectedValues(TableDataDesensitizationBean desensitizationBean) { + private Map generateRolesCheckBoxSelectedValues(TableDataDesensitizationItem desensitizationItem) { Map result = new HashMap<>(roleMap.size()); for (Map.Entry roleEntry : roleMap.entrySet()) { String roleId = roleEntry.getKey(); String roleName = roleEntry.getValue(); - if (desensitizationBean.getRoleIds().contains(roleId)) { + if (desensitizationItem.getRoleIds().contains(roleId)) { result.put(roleName, true); } else { result.put(roleName, false); @@ -444,7 +419,7 @@ public class TableDataDesensitizationTableModel extends UITableModelAdapter editorPane; + private UITableEditorPane editorPane; public TableDataDesensitizationTablePane(DesensitizationTableData tableData, Component parent) { this.tableData = tableData; @@ -54,13 +54,13 @@ public class TableDataDesensitizationTablePane extends JPanel { */ public void populateDesensitizationSetting(DesensitizationTableData tableData) { this.tableData = tableData; - editorPane.populate(tableData.getDesensitizationBeans().toArray(new TableDataDesensitizationBean[0])); + editorPane.populate(tableData.getDesensitizationConfig().getDesensitizationItems().toArray(new TableDataDesensitizationItem[0])); } /** * 获取当前对TableData的配置脱敏规则信息 */ - public List updateDesensitizationSetting() { + public List updateDesensitizationSetting() { return editorPane.update(); } } From 7f1f72ec74725c4889cf240fd1994c1b082ef5f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yvan-=E6=AC=A7=E9=98=B3=E5=B8=86?= Date: Fri, 28 Oct 2022 11:30:12 +0800 Subject: [PATCH 2/2] =?UTF-8?q?REPORT-80693=20-=20=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=84=B1=E6=95=8F=E4=BA=8C=E6=9C=9F=EF=BC=88=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=EF=BC=89=20=E4=BB=A3=E7=A0=81=E8=B4=A8=E9=87=8F=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E9=97=AE=E9=A2=98=EF=BC=8C=E5=8A=A0=E4=B8=AA=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desensitization/TableDataPreviewDesensitizeManager.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java index ed5104fbc..3d3c59331 100644 --- a/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java +++ b/designer-base/src/main/java/com/fr/design/data/datapane/preview/desensitization/TableDataPreviewDesensitizeManager.java @@ -177,6 +177,12 @@ public class TableDataPreviewDesensitizeManager implements DesensitizationManage return departmentId + CONNECTOR + positionId; } + /** + * 根据列名,从PreviewTableModel中匹配列序号,如果返回-1代表未匹配到 + * @param desensitizationItem + * @param previewModel + * @return + */ public int matchColumnIndex(TableDataDesensitizationItem desensitizationItem, PreviewTableModel previewModel) { return previewModel.getColumnIndexWithExceptionIngore(desensitizationItem.getColumnName()); }