如預期的那樣,使用以下代碼和默認配置(glassfish 3.1.2中的HTTP基本身份驗證+文件領域)來請求客戶端的憑據。但是,刷新後甚至在瀏覽器中的新選項卡上(即使不允許使用cookie,也不存儲密碼),客戶端不會再被要求重新輸入憑據。只有當瀏覽器關閉並重新打開時,客戶端纔會再次詢問憑據。如何進行身份驗證?HttpServletRequest.authenticate不要求重新登錄
public class AuthenticateServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
request.authenticate(response);
out.println("Authenticate Successful");
} finally {
request.logout();
out.close();
}
}
[...]
}
問候,
邁克
- 編輯 -
的問題提出了同時使用程序安全性的方法進行實驗。在重新啓動的客戶端瀏覽器中使用以下代碼時,第一個println語句會引發NPE。登錄窗口甚至不會出現在客戶端瀏覽器中。然而,當println語句被刪除時,登錄窗口確實出現並且登錄工作。當再次添加println語句(並且不重新啓動瀏覽器)時,它們將被打印。我也嘗試將println-Statements移入另一個try/catch-block,但這似乎沒有什麼區別。
try {
request.authenticate(response);
out.println("<p>Principal's name: " + request.getUserPrincipal().getName() + "</p>"); <== NPE
out.println("<p>is that user in role 'gruppeA': " + request.isUserInRole("a_gruppe") + "</p>");
out.println("<p>remote User is: " + request.getRemoteUser() + "</p>");
out.println("Authenticate Successful");
} catch (ServletException ex) {
out.println("Login Failed with a ServletException." + ex.getMessage());
return;
} finally {
out.close();
}
這使我想到如何驗證工作以及如何使用它。可能的,身份驗證會在瀏覽器發生登錄並將該信息存儲在服務器中時記住。可能不是。
我試過,順便說一句,使會話無效。然而,不需要新的登錄名(這符合我原來的帖子,我 - 用於測試 - 在客戶端瀏覽器中禁用cookie)。