2011-04-05 62 views
1

我想爲應用程序添加「註銷」功能,並且這樣做需要忘記所有密碼。替換Authenticator似乎沒有效果,因爲getPasswordAuthentication不會再被調用。似乎有一個密碼緩存,但我找不到或清除它的方式。下面是測試情況:通過java.net.Authenticator設置清除密碼

import java.net.*; 
import java.io.*; 

class Main { 
    public static void main(String[] args) throws MalformedURLException, IOException { 
     Authenticator.setDefault(new Authenticator() { 
      public PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("stack", "overflow".toCharArray()); 
      } 
     }); 

     URLConnection connection = new URL("http://devio.us/~ricky/stackoverflow-protected/nothingtosee.html").openConnection(); 
     System.out.println(new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")).readLine()); 

     Authenticator.setDefault(new Authenticator() { 
      public PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("no", "way".toCharArray()); 
      } 
     }); 

     connection = new URL("http://devio.us/~ricky/stackoverflow-protected/nothingtosee.html").openConnection(); 
     System.out.println(new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8")).readLine()); 

     //This second line ideally should not succeed. I.e., the results are <html>\n<html>, but only the first <html> should be seen. 
    } 
} 

該網站是一個我和控制的情況下,它消失以任何理由:堆棧/溢出是有效的,無/辦法是不使用的.htaccess。如果您知道更標準的參考站點,請隨時更改我的代碼或建議更換。

回答

1

您可以嘗試設置空身份驗證器。以下是Java Doc規範:

setDefault public static void setDefault(Authenticator a)設置代理或HTTP服務器請求身份驗證時將由網絡代碼使用的身份驗證器。 首先,如果存在安全管理器,則使用NetPermission(「setDefaultAuthenticator」)權限調用其checkPermission方法。這可能會導致java.lang.SecurityException。

參數: a - 要設置的認證碼。如果a爲空,則任何先前設置的認證者都被刪除。

+0

我需要一個身份驗證器,以便我可以提示新用戶輸入用戶名/密碼。無論如何,我不認爲這是有效的,因爲認證者的方法甚至不是第二次被調用。 – 2011-12-08 06:51:51

+0

連接獲取流失敗後,您應該將認證碼重置爲空。並提示用戶下次再次輸入用戶名/密碼。我認爲這取決於你的程序邏輯控制。 – hejiaming007 2011-12-23 13:48:34