当前位置: 首页 > 面试题库 >

选择密码行并粘贴到记事本中会显示密码

霍浩皛
2023-03-14
问题内容

我最近在我的Java应用程序中遇到了上述问题。即使我将字段明确设置为JPasswordField并尝试用星号掩盖密码,但我仍然会遇到此问题。当我们编辑密码字段时,不会发生问题,仅当您选择该行时才会发生。例如,我连续有两列,如果我选择整行并尝试将其复制并粘贴到记事本中,则会出现密码。我是Java编程领域的新手,如果有人可以提供帮助将非常有帮助。


问题答案:

您想要的是相当合乎逻辑的。从表中复制粘贴数据时,应遵循呈现方式。

标准复制操作将使用模型中可用的数据,其中密码以纯文本形式提供。我们可以开始讨论是否要让模型包含纯文本形式的密码,而没有对其应用任何哈希运算法则…但是那不能回答您的问题。

对于您的问题,您应该修改的剪切/复制操作的行为JTable。查看拖放式Swing教程,更具体地看一下Adding
Cut,Copy和Paste部分
。不幸的是,我没有立即找到要引用的示例。

编辑

在下面找到一个示例,该示例JXTable使用呈现值进行复制操作(我没有复制粘贴导入内容)。关于代码的一点说明:

  1. 它也使用SwingX来说明kleopatra
  2. 示例TableModel及其元素非常愚蠢。为了避免过多的工作,我需要与我们的真实产品相似的东西,以便能够复制一些代码
  3. SpeedStringValueAltitudeStringValue类违反了StringValue他们返回接口null。我懒得定义一个新接口,并且StringValue我在SwingX上设置的实例的DefaultTableRenderer行为与文档一致。但是,我认为拥有单独的StringValue实例(每个实例都具有将特定类转换为实例的知识)String是现实世界中的用例,SwingX
  4. TransferHandler重用StringValue创建一个逻辑Table只包含String实例,然后倒在默认的JTable行为。这允许重用渲染器中实现的逻辑,并允许复制视觉值而不是模型值。我不确定这是否是最好的解决方案,但是它可以工作。但是,如果在中有类似行为是标准的SwingX,那就太好了,因为他们已经有了基础架构
  5. 该代码缺少注释,因为它已经足够长了。如果不清楚,请发表评论,我会尽力澄清
        public class TableTransferHandlerDemo {

      public static void main( String[] args ) throws InvocationTargetException, InterruptedException {
        EventQueue.invokeAndWait( new Runnable() {
          public void run() {
            JFrame frame = new JFrame( "TestFrame" );

            JPanel contentPane = new JPanel( new BorderLayout(  ) );
            contentPane.add( createTable(), BorderLayout.CENTER );
            frame.getContentPane().add( contentPane );

            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
            frame.pack();
            frame.setVisible( true );
          }
        } );
      }

      private static CompositeStringValue createStringValue() {
        CompositeStringValue stringValue = new CompositeStringValue();
        stringValue.delegates.add( new AltitudeStringValue() );
        stringValue.delegates.add( new SpeedStringValue() );
        return stringValue;
      }

      public static JXTable createTable(){
        final JXTable table = new JXTable(  );
        table.setSelectionMode( ListSelectionModel.MULTIPLE_INTERVAL_SELECTION );
        table.setModel( createTableModel() );
        CompositeStringValue stringValue = createStringValue();
        table.setDefaultRenderer( Object.class, new DefaultTableRenderer( stringValue ) );
        table.setTransferHandler( new TableTransferHandler( table, stringValue ) );
        //make sure ctrl-c triggers a copy
        InputMap inputMap = table.getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT );
        inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_C, InputEvent.CTRL_MASK ), "copyAction" );
        table.getActionMap().put( "copyAction", new AbstractAction() {
          public void actionPerformed( ActionEvent e ) {
            ActionEvent event = new ActionEvent( table, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers() );
            TransferHandler.getCopyAction().actionPerformed( event );
          }
        } );
        return table;
      }

      public static class Speed{
        public double speed;
        public String unit = "km/h";
        public Speed( double speed ){ this.speed = speed;}
      }
      public static class Altitude{
        public double altitude;
        public String unit = "m";
        public Altitude( double altitude ){ this.altitude = altitude; }
      }
      public static class SpeedStringValue implements StringValue{
        public String getString( Object o ) {
          if ( o instanceof Speed ){
            return ( ( Speed ) o ).speed + ( ( Speed ) o ).unit;
          }
          return null;
        }
      }
      public static class AltitudeStringValue implements StringValue{
        public String getString( Object o ) {
          if ( o instanceof Altitude ){
            return ( ( Altitude ) o ).altitude + ( ( Altitude ) o ).unit;
          }
          return null;
        }
      }
      public static class CompositeStringValue implements StringValue{
        public List<StringValue> delegates = new ArrayList<StringValue>(  );
        public String getString( Object o ) {
          for ( StringValue stringValue : delegates ) {
            String string = stringValue.getString( o );
            if ( string != null ) return string;
          }
          return o != null ? o.toString() : "null";
        }
      }
      public static TableModel createTableModel(){
        return new DefaultTableModel(
            new Object[][]{ new Object[]{ new Speed( 10 ), new Altitude( 100 )},
                new Object[]{ new Speed( 20 ), new Altitude( 200 ) }},
            new Object[]{"Speed", "Altitude"} );
      }
      public static class TableTransferHandler extends TransferHandler{
        private JXTable table;
        private StringValue stringValue;

        public TableTransferHandler( JXTable aTable, StringValue aStringValue ) {
          table = aTable;
          stringValue = aStringValue;
        }
        @Override
        public void exportToClipboard( JComponent aComponent, Clipboard aClipboard, int aAction ) throws IllegalStateException {
          JTable table = createTable();
          table.getTransferHandler().exportToClipboard( table, aClipboard, aAction );
        }
        @Override
        public void exportAsDrag( JComponent aComponent, InputEvent aEvent, int aAction ) {
          JTable table = createTable();
          table.getTransferHandler().exportAsDrag( table, aEvent, aAction );
        }
        @Override
        protected Transferable createTransferable( JComponent c ) {
          //this transfer handler should not create any transferables
          return null;
        }
        /**
         * Create a table, representing the JXTable containing only Strings
         */
        private JTable createTable() {
          JTable table = new JTable( new StringTableModel( this.table, stringValue ) );
          table.setSelectionModel( this.table.getSelectionModel() );//make sure the selection is synced
          return table;
        }
      }

      private static class StringTableModel extends AbstractTableModel {
        private JXTable delegateTable;
        private StringValue stringValue;

        private StringTableModel( JXTable aTable, StringValue aStringValue ) {
          delegateTable = aTable;
          stringValue = aStringValue;
        }

        public int getRowCount() {
          return delegateTable.getModel().getRowCount();
        }

        public int getColumnCount() {
          return delegateTable.getModel().getColumnCount();
        }

        public Object getValueAt( int aRowIndex, int aColumnIndex ) {
          return stringValue.getString( delegateTable.getValueAt( aRowIndex, aColumnIndex ) );
        }
      }
    }



 类似资料:
  • 我有一个500行的txt文件打开在VI,我想复制整个文件从VI并粘贴到记事本 我试过把整个文档都拉过来,但我不知道怎么把它粘贴到记事本里

  • 我正在使用。我刚刚检查了我的编码类,发现它的字节代码显示了我的加密密码在类中的原样。我真的开始担心我所有数据的安全性。如果有人黑了我的类,那么我的数据会发生什么。为什么java类不将字符串名和值转换为字节码?

  • 问题内容: 当开发人员想要保护自己的Web应用程序安全时,Spring Security非常有用。 但是,如何创建帐户呢?和“忘记密码”?大多数登录页面都具有这些链接以及用户名和密码字段。Spring的默认登录页面没有这些链接…在很好的情况下,它可以支持“记住我” … Spring是否支持创建帐户,忘记密码和更改密码这些流程?如果答案是肯定的,您能给我指出一些文件吗? 我已经搜索了此问题,但找不到

  • 我在远程服务器上有一个git repo,并使用ssh和密码身份验证来克隆、拉、推。从命令行,一切正常。 但是在 vscode 中,当我尝试从远程存储库拉取或推送时,没有显示密码提示。Vscode似乎在等待什么,但什么也没发生。这是一个错误,还是我做错了什么? 我想在linux上使用visualstudio代码作为git客户端。 从命令行: 在vscode中:

  • 问题内容: 这个问题很简单,由于某种原因我无法获得正确的结果以仅显示重复记录 样本输出 预期产量 我如何做到这一点? 问题答案: sqlfiddle

  • 问题内容: 我需要将多行bash代码粘贴到终端中,但是每当粘贴时,每行都会在粘贴后立即作为单独的命令运行。 问题答案: 复制之前,请尝试将其放在每行的末尾。