电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Java密碼屏蔽輸入的實(shí)現(xiàn)方法

瀏覽:93日期:2024-07-02 16:33:24
內(nèi)容: 1 前言 大家知道,在登錄Microsoft Windows操作系統(tǒng)過程中,在登錄窗口中需要用戶輸入注冊(cè)用戶名稱和密碼。細(xì)心的讀者會(huì)發(fā)現(xiàn):用戶輸入的注冊(cè)用戶名稱內(nèi)容為原碼字符顯示,而注冊(cè)密碼內(nèi)容為掩碼字符顯示。例如,同樣在兩各文本區(qū)中輸入字符'a',在用戶名文本區(qū)中顯示的是字符'a',而在密碼區(qū)中顯示的字符為掩碼'*',這就是所謂的密碼屏蔽輸入。將輸入的密碼屏蔽回顯,不僅增強(qiáng)了用戶私有信息的安全性,更重要的是維護(hù)了計(jì)算機(jī)系統(tǒng)的穩(wěn)定性和安全性。 Java以其語(yǔ)言的面向?qū)ο竽芰?、高安全性和Java平臺(tái)的系統(tǒng)無(wú)關(guān)性等技術(shù)優(yōu)勢(shì),在商務(wù)軟件開發(fā)過程中贏得了眾多程序設(shè)計(jì)人員的青睞。JDK在AWT和JFC類庫(kù)中定義了用于密碼字符屏蔽的應(yīng)用程序設(shè)計(jì)接口(API),使應(yīng)用系統(tǒng)開發(fā)人員在編寫圖形用戶界面程序時(shí),能夠靈活地定義密碼回顯方式。但是,對(duì)于基于命令行方式的Java應(yīng)用程序,JDK沒有定義相應(yīng)的密碼屏蔽策略,程序設(shè)計(jì)人員必須編寫字符回顯控制代碼。本文將通過對(duì)實(shí)例代碼的分析,對(duì)基于JDK平臺(tái)開發(fā)Java應(yīng)用程序的密碼屏蔽輸入方法進(jìn)行探討,主要內(nèi)容包括: ●AWT組件對(duì)象密碼屏蔽方法 ●JSwing組件對(duì)象密碼屏蔽方法 ●Java命令行程序密碼屏蔽方法 2 利用AWT組件實(shí)現(xiàn)密碼屏蔽輸入 Java抽象窗口工具包(Abstract Window Toolkit,AWT)是在JDK1.0版本中定義的用于編寫Java圖形用戶界面程序的應(yīng)用程序設(shè)計(jì)接口,程序設(shè)計(jì)人員可以利用該包中定義的多種類型組件對(duì)象,編寫具有用戶界面的應(yīng)用程序。 為了實(shí)現(xiàn)用戶輸入信息的屏蔽,可以利用AWT組件庫(kù)中定義的TextField對(duì)象,該對(duì)象的定義繼承結(jié)構(gòu)如下: java.lang.Object | +--java.awt.Component | +--java.awt.TextComponent | +--java.awt.TextField 在該對(duì)象中,定義了用于設(shè)置和維護(hù)用戶輸入字符回顯方式的方法,這些方法的定義形式為: char getEchoChar():獲取用戶定義的文本區(qū)回顯字符; boolean echoCharIsSet()判斷是否定義了回顯字符; void setEchoChar(char c):設(shè)置文本區(qū)回顯字符為字符c。 因此,在讀者編寫的Java程序中,可以在創(chuàng)建TextField對(duì)象實(shí)例后,例如上述方法控制文本區(qū)回顯字符的方式。下面的程序完整地演示了回顯字符的定義方式: //PasswordMaskingDemo.javaimport java.awt.*;import java.awt.event.*;import javax.swing.JOptionPane;public class PasswordMaskingDemo{public static void main(String args[]){ final Frame frmFrame = new Frame(); Panel pnlPanel = new Panel(); Label lblUsername = new Label('用戶名'); Label lblPassword = new Label('密碼'); final TextField txtUsername = new TextField('Anyomonus'); final TextField txtPassword = new TextField('', 8); txtUsername.setEditable(false); txtPassword.setEchoChar('*'); Button btnButton1 = new Button('登錄'); Button btnButton2 = new Button('其它用戶登錄'); Button btnButton3 = new Button('關(guān)閉'); btnButton1.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { if( (txtPassword.getText()).length() == 0 ) { JOptionPane.showMessageDialog(frmFrame, '密碼不能為空'); return; } txtPassword.setColumns(16); System.out.println('Anyomonus用戶的密碼:' +txtPassword.getText() ); } }); btnButton2.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { txtUsername.setEditable(true); } }); btnButton3.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); pnlPanel.add(lblUsername); pnlPanel.add(txtUsername); pnlPanel.add(lblPassword); pnlPanel.add(txtPassword); pnlPanel.add(btnButton1); pnlPanel.add(btnButton2); pnlPanel.add(btnButton3); frmFrame.add(pnlPanel); frmFrame.setTitle('演示TextField對(duì)象的應(yīng)用方法'); frmFrame.pack(); frmFrame.show();}} 該程序運(yùn)行的窗口形式如下圖所示: IMG http://developer.ccidnet.com/pub/attachment/2003/6/197104.gif[/IMG]圖1 PasswordMaskingDemo.java程序運(yùn)行窗口 在上述程序中,與文本區(qū)回顯控制相關(guān)的代碼為: final TextField txtPassword = new TextField('', 8);txtPassword.setEchoChar('*'); 在上面的代碼中,首先創(chuàng)建初始內(nèi)容為空、可輸入8個(gè)字符的TextField對(duì)象實(shí)例txtPassword后,利用TextField對(duì)象中定義的setEchoChar方法設(shè)置該文本區(qū)的回顯字符為星號(hào)'*',從而實(shí)現(xiàn)輸入字符的掩碼。因此總結(jié)為:可以利用TextField對(duì)象中定義的setEchoChar方法,實(shí)現(xiàn)AWT組件對(duì)象程序中的字符掩碼輸入和回顯控制。 3 利用JSwing組件對(duì)象實(shí)現(xiàn)密碼屏蔽輸入 JSwing組件對(duì)象是輕量級(jí)Java組件對(duì)象,其中定義了多種組件對(duì)象類型,而且其外觀也更加新穎。與AWT組件對(duì)象相對(duì)應(yīng),在JSwing組件對(duì)象中也定義了JTextField對(duì)象,用于用戶進(jìn)行文本輸入。那么,讀者是否會(huì)聯(lián)想利用對(duì)象中也定義的setEchoChar方法定義回顯字符呢?實(shí)際情況不是這樣。在JTextField對(duì)象中沒有定義該方法,而是以JTextField為父對(duì)象,定義了用于進(jìn)行密碼輸入的文本區(qū)對(duì)象JPasswordField,該對(duì)象的定義繼承結(jié)構(gòu)如下: java.lang.Object | +--java.awt.Component | +--java.awt.Container | +--javax.swing.JComponent | +--javax.swing.text.JTextComponent | +--javax.swing.JTextField | +--javax.swing.JPasswordField 在JPasswordField對(duì)象中,定義了多種類型用于控制字符回顯方式的方法,其中setEchoChar方法即用于定義文本區(qū)回顯字符,如下面代碼段所示: … …JPasswordField password = new JPasswordField(8);password.setEchoChar('*');… … 與AWT組件對(duì)象定義文本區(qū)的回顯方式類似,上述代碼創(chuàng)建了JPasswordField對(duì)象實(shí)例后,設(shè)置該對(duì)象的回顯字符為星號(hào)'*'。但是,讀者需要注意的是:在JSwing對(duì)象中,需要利用JPasswordField對(duì)象來(lái)管理用戶輸入文本。 4 Java命令行程序密碼屏蔽輸入實(shí)現(xiàn)方式 與基于AWT或者JSwing的圖形用戶界面程序相比,在基于命令行的Java程序中實(shí)現(xiàn)密碼屏蔽輸入要比較麻煩一些,原因在于JDK沒有提供任何基于文本的字符回顯控制方法,因此需要編寫相應(yīng)的控制代碼?;谕ㄓ眯苑矫娴目紤],在本文中將編寫用于屏蔽用戶輸入的對(duì)象InputMasking,該對(duì)象的定義如下: //InputMasking.javaimport java.io.*;public class InputMasking{ String getPassword(String initial) throws IOException { MaskingThread listeningthread = new MaskingThread(initial); Thread thread_instance = new Thread(listeningthread); String password = ''; thread_instance.start(); while (true) { char input = (char)System.in.read(); listeningthread.stopMasking(); if (input == 'r') { input = (char)System.in.read(); if (input == 'n')break; else continue; } else if(input == 'n') break; else password += input; } return password; }} 該對(duì)象在后臺(tái)啟動(dòng)線程的控制下,從系統(tǒng)輸入設(shè)備中讀取字符并對(duì)該字符進(jìn)行分析。如果遇到行結(jié)束標(biāo)志,則返回該線程獲取的字符串對(duì)象password。讀者一定會(huì)關(guān)心后臺(tái)線程對(duì)象MaskingThread的作用,該線程對(duì)象周期地刷新終端窗口,其目的在于屏蔽用戶輸入的字符,使該字符不能夠在窗口中顯示出來(lái)。該線程對(duì)象的定義為: //MaskingThread.javaimport java.io.*;class MaskingThread extends Thread { private boolean stop = false; private int index; private String initial; public MaskingThread(String initial) { this.initial = initial; } public void run() { while(!stop) { try { this.sleep(1); } catch (InterruptedException ex) { ex.printStackTrace(); } if (!stop) { System.out.print('r' + initial + ' r' + initial); } System.out.flush(); } } public void stopMasking() { this.stop = true; }} 在InputMasking對(duì)象和MaskingThread對(duì)象的配合下,使得基于命令行的Java應(yīng)用程序能夠?qū)崿F(xiàn)用戶輸入密碼字符的屏蔽,其核心方法是利用后臺(tái)線程時(shí)時(shí)刷新終端窗口,屏蔽用戶輸入字符。下面的CmdLineUtility對(duì)象即利用前面定義的兩個(gè)對(duì)象進(jìn)行用戶輸入屏蔽,請(qǐng)讀者實(shí)際運(yùn)行上述程序,以了解命令行Java程序屏蔽輸入的方式: //CmdLineUtility.javaimport java.io.*;public class CmdLineUtility{ public static void main(String argv[]) { InputMasking masking = new InputMasking();String password = null;try { password = masking.getPassword('請(qǐng)輸入登錄密碼: '); } catch(IOException ex) { ex.printStackTrace(); } System.out.println('您輸入的密碼為: ' + password); }} 5 結(jié)束語(yǔ) 本文著重講解了基于Java語(yǔ)言編寫圖形用戶界面程序和命令行程序中,實(shí)現(xiàn)用戶輸入字符屏蔽的方法。從文中內(nèi)容可以看出:對(duì)于圖形用戶界面程序,無(wú)論利用AWT組件對(duì)象,還是利用JSwing組件對(duì)象,均可以利用相應(yīng)的組件對(duì)象并調(diào)用對(duì)象實(shí)例中定義的方法,實(shí)現(xiàn)用戶輸入字符的屏蔽,從而簡(jiǎn)化了代碼編寫難度。 對(duì)于基于命令行的Java程序,由于JDK中沒有定義相應(yīng)的Java對(duì)象,因此,需要編寫屏蔽用戶輸入的代碼,將用戶輸入不顯示在終端窗口中,從而實(shí)現(xiàn)用戶輸入屏蔽。 本文選自:賽迪網(wǎng) Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd
標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 合肥钣金加工-安徽激光切割加工-机箱机柜加工厂家-合肥通快 | 大连海岛旅游网>>大连旅游,大连海岛游,旅游景点攻略,海岛旅游官网 | 标策网-专注公司商业知识服务、助力企业发展 | 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | SOUNDWELL 编码器|电位器|旋转编码器|可调电位器|编码开关厂家-广东升威电子制品有限公司 | 板框压滤机-隔膜压滤机-厢式压滤机生产厂家-禹州市君工机械设备有限公司 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 罗氏牛血清白蛋白,罗氏己糖激酶-上海嵘崴达实业有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 右手官网|右手工业设计|外观设计公司|工业设计公司|产品创新设计|医疗产品结构设计|EMC产品结构设计 | 轻型地埋电缆故障测试仪,频响法绕组变形测试仪,静荷式卧式拉力试验机-扬州苏电 | 对夹式止回阀厂家,温州对夹式止回阀制造商--永嘉县润丰阀门有限公司 | YAGEO国巨电容|贴片电阻|电容价格|三星代理商-深圳市巨优电子有限公司 | 活性炭-果壳木质煤质柱状粉状蜂窝活性炭厂家价格多少钱 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 天然鹅卵石滤料厂家-锰砂滤料-石英砂滤料-巩义东枫净水 | 拉力机-万能试验机-材料拉伸试验机-电子拉力机-拉力试验机厂家-冲击试验机-苏州皖仪实验仪器有限公司 | 北京办公室装修,办公室设计,写字楼装修-北京金视觉装饰工程公司 北京成考网-北京成人高考网 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 雪花制冰机(实验室雪花制冰机)百科 | 过滤器_自清洗过滤器_气体过滤器_苏州华凯过滤技术有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 洛阳网站建设_洛阳网站优化_网站建设平台_洛阳香河网络科技有限公司 | 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | 福建省教师资格证-福建教师资格证考试网| 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 车牌识别道闸_停车场收费系统_人脸识别考勤机_速通门闸机_充电桩厂家_中全清茂官网 | 深圳富泰鑫五金_五金冲压件加工_五金配件加工_精密零件加工厂 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 | arch电源_SINPRO_开关电源_模块电源_医疗电源-东佑源 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 刹车盘机床-刹车盘生产线-龙口亨嘉智能装备 | 档案密集架_电动密集架_移动密集架_辽宁档案密集架-盛隆柜业厂家现货批发销售价格公道 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 广州市哲铭油墨涂料有限公司,水性漆生产研发基地 | 低温等离子清洗机(双气路进口)-嘉润万丰 | 珠海冷却塔降噪维修_冷却塔改造报价_凉水塔风机维修厂家- 广东康明节能空调有限公司 | 二手Sciex液质联用仪-岛津气质联用仪-二手安捷伦气质联用仪-上海隐智科学仪器有限公司 |