diff --git a/src/main/java/burp/BurpExtender.java b/src/main/java/burp/BurpExtender.java index ccaf6f7..0b4b04e 100644 --- a/src/main/java/burp/BurpExtender.java +++ b/src/main/java/burp/BurpExtender.java @@ -282,15 +282,7 @@ public class BurpExtender implements IBurpExtender, IHttpListener, IMessageEdito */ @Override public byte[] getSelectedData() { - int[] selectRows = dataTable.getSelectedRows(); - StringBuilder selectData = new StringBuilder(); - for (int row : selectRows) { - selectData.append(dataTable.getValueAt(row, 0).toString()).append("\n"); - } - // 便于单行复制,去除最后一个换行符 - String revData = selectData.reverse().toString().replaceFirst("\n", ""); - StringBuilder retData = new StringBuilder(revData).reverse(); - return helpers.stringToBytes(retData.toString()); + return helpers.stringToBytes(dataPanel.getSelectedData(dataTable)); } /** diff --git a/src/main/java/burp/ui/board/DatatablePanel.java b/src/main/java/burp/ui/board/DatatablePanel.java index 80ce407..881d46a 100644 --- a/src/main/java/burp/ui/board/DatatablePanel.java +++ b/src/main/java/burp/ui/board/DatatablePanel.java @@ -2,6 +2,8 @@ package burp.ui.board; import java.awt.BorderLayout; import java.awt.Color; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; import java.awt.event.ComponentAdapter; @@ -11,12 +13,14 @@ import java.awt.event.FocusListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.util.List; +import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.RowFilter; import javax.swing.ScrollPaneConstants; +import javax.swing.TransferHandler; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.DefaultTableModel; @@ -51,7 +55,6 @@ public class DatatablePanel extends JPanel { idColumn.setMaxWidth(50); String defaultText = "Search"; - searchField = new JTextField(defaultText); // 设置灰色默认文本Search searchField.setForeground(Color.GRAY); @@ -98,7 +101,7 @@ public class DatatablePanel extends JPanel { sorter = new TableRowSorter<>(model); table.setRowSorter(sorter); } - RowFilter rowFilter = RowFilter.regexFilter(String.format("%s%s", "(?i)", searchText), 0); + RowFilter rowFilter = RowFilter.regexFilter(String.format("%s%s", "(?i)", searchText), 1); sorter.setRowFilter(rowFilter); } } @@ -188,6 +191,31 @@ public class DatatablePanel extends JPanel { } } }); + + table.setTransferHandler(new TransferHandler() { + @Override + public void exportToClipboard(JComponent comp, Clipboard clip, int action) throws IllegalStateException { + if (comp instanceof JTable) { + StringSelection stringSelection = new StringSelection(getSelectedData( + (JTable) comp)); + clip.setContents(stringSelection, null); + } else { + super.exportToClipboard(comp, clip, action); + } + } + }); + } + + public String getSelectedData(JTable table) { + int[] selectRows = table.getSelectedRows(); + StringBuilder selectData = new StringBuilder(); + for (int row : selectRows) { + selectData.append(table.getValueAt(row, 1).toString()).append("\n"); + } + // 便于单行复制,去除最后一个换行符 + String revData = selectData.reverse().toString().replaceFirst("\n", ""); + StringBuilder retData = new StringBuilder(revData).reverse(); + return retData.toString(); } private static void addRowToTable(DefaultTableModel model, Object[] data) {