2011-05-21 81 views
4

我嘗試編寫一個登錄表單,它將用戶名和密碼傳遞給servlet並讓用戶登錄。Java EE登錄頁面問題

然後,在servlet,我是勞

request.login(username, password); 

但它拋出異常,它無法對用戶進行認證。

String authType = request.getAuthType(); 
if(authType != null) { 
request.login(username, password); 
} 
  1. 我不知道如何編寫一個簡單的登錄頁面。
  2. request.authenticate(response)的用法是什麼;

我試了一下,它彈出一個無法繼續進行的屏幕。

  1. 我嘗試引用這個頁面http://download.oracle.com/javaee/1.4/tutorial/doc/Security5.html,我認爲需要在登錄之前先配置身份驗證並添加一些用戶。

請幫忙。

謝謝。

回答

4

使用HttpServletRequest#login()方法表明您正在使用屬於Java EE 6的Servlet 3.0。但是您正在閱讀一本有7.5年曆史的J2EE 1.4教程。我建議把那個塵土飛揚的教程放在一邊,然後閱讀Java EE 6 tutorial。集裝箱託管安全開始here

回到你的具體問題,login()會(as documented)拋出一個異常時的登錄無效或當容器沒有任何境界 definied可言。假設你確定用戶名/密碼是有效的,它可能是最後一個原因。如何做到這一點完全取決於有問題的servletcontainer。只需使用關鍵字「Realm」查閱其文檔。例如,對於Tomcat 7.0,這是Realm Configuration HOW-TO。如果您在SQL數據庫中擁有用戶名/密碼,則可能需要使用JDBCRealm

一旦你已經配置在servletcontainer水平境界,那麼你就可以使用login()方法,你想要的方式。根據Java EE 6教程,不要忘記將<security-constraint>添加到web.xml,以限制對某些URL模式的訪問並指定登錄頁面的URL。

+0

如何使用glassfish配置realm servlet容器級別? – peterwkc 2011-05-21 06:24:11

+0

它的工作原理。謝謝你的幫助。 – peterwkc 2011-05-21 07:02:15

+0

不客氣。在GlassFish中,您可以在管理控制檯的* Configuration> Security> Realms *部分對其進行配置。您可以在這裏找到一個簡潔的博客,其中概述瞭如何配置JDBCRealm(使用MySQL的JDBC連接池):https://www.infosecisland.com/blogview/5522-Configuring-Security-in-Glassfish-v3.html – BalusC 2011-05-21 13:04:55