2013-04-01 26 views
4

我有一個使用j_security_check的JSP Web應用程序。如果我知道用戶名和密碼,是否可以通過JSP頁面以編程方式登錄特定用戶j_security_check?我試圖通過URL參數這種方式的變量...如何以編程方式登錄到j_security_check

response.sendRedirect(www.mydomain.com/j_security_check?j_username=someUserName&j_password=somePassword) 

...但它不工作。有什麼辦法可以做到嗎?

編輯: 這裏是我的登錄頁面,它現在正常工作。爲了安全起見,我修剪了部分代碼。

<form name="signon" method="post" action="/j_security_check"> 
     <table width="100%" cellpadding="4" cellspacing="0"> 

     <tr> 
      <td valign="top" colspan="4"> 
      <h2><%= UI.tr(null, "login_details") %> 
      </h2> 
      </td> 
     </tr> 

     <tr> 
      <td valign="top" width="150px"> 
      <%= UI.tr(null, "login_id") %> 
      </td> 
      <td valign="top" width="150px"> 
      <%= UI.tr(null, "login_pass") %> 
      </td> 
      <td valign="top" width="150px"> 
      <%= UI.tr(null, "login_token_or_captcha") %> 
      </td> 
      <td width="100%">&nbsp;</td> 
     </tr> 


     <tr> 

      <% 
      if (logins == null) { 
      %> 
      <td> 
      <input type="hidden" name="j_uri" value="/index.jsp"> 
      <input type="text" id="username" name="j_username" size="16" style="width: 150px;" autocomplete="off" <%= username == null ? "" : "disabled value='" + username + "'" %> onblur="return checkCaptcha();"> 
      </td> 
      <% 
      } else { 
      %> 
      <td> 
      <select name="j_username" style="width: 150px;"> 
       <% 
       for (Login login : logins) { 
       %> 
       <option><%= login.getUsername() %> 
       </option> 
       <% 
       } 
       %> 
      </select> 
      </td> 
      <% 
      } 
      %> 
      <td><input type="password" name="j_password" size="16" style="width: 150px;">    </td> 
      <td><input type="text" id="mypw" name="mypw" size="16" autocomplete="off" style="width: 150px;"></td> 
      <td><input class="submit" type="submit" name="submit" value="<%= UI.tr(null, "login_submit") %>"></td> 
     </tr> 




<tr> 
    <td valign="top" colspan="4"> 
    <%-- <% 
    if("registry.nic.hn".equals(request.getServerName())) { 
    %> 
    <!-- GARTH - put whatever you want here for .HN --> 
    &nbsp; 
    <% } else { %> --%> 
     <h2><%= UI.tr(null, "login_news") %> 
     </h2> 
     <div><%= HTMLFormat.addBreaks(SiteConf.getSiteConf().getNews()) %> 
     </div> 
    <%-- <% } %>  --%> 
    </td> 
</tr> 

回答

3

下面的代碼對我的作品在JSP文件:

String url = "j_security_check?j_username=" + username + "&j_password=" + password; 
String redirectUrl = response.encodeRedirectURL(url); 
response.sendRedirect(redirectUrl); 
+0

它不適合我。有沒有配置或有關j_security_check的內容? –

+1

您使用什麼框架進行身份驗證? Tomcat表單身份驗證? – Michael

+0

我該如何檢查框架版本? –

0

可以讓用戶輸入一個jsp頁面上的用戶名和密碼,servlet或使用Facelets頁面及描述here登錄用戶的Bean。

+0

Hi.Thanks你的答案在第一次。我不希望用戶輸入密碼或用戶名。我只想通過預定義的用戶以編程方式登錄到j_security_check。這在JSP頁面上可能嗎? –

+0

jsp頁面應該僅用於捕獲用戶的登錄信息,並且應該使用request.login(username,password)方法將該信息發送給處理用戶登錄的servlet。 – ChadNC

+0

如何發送記錄信息?在jsp頁面中我看不到request.login方法? –

1

你說你想以編程方式登錄。如果這是你的目標,我會避免使用j_security_check。 j_security_check與基於表單的身份驗證一起使用(查看關於保護Web應用程序的此Oracle資源 - 表單身份驗證覆蓋了大約一半:http://docs.oracle.com/cd/E24329_01/web.1211/e24485/thin_client.htm)。我建議你看一下這個資源,並深入到一些替代品中,但另一種方法是使用Java認證和授權服務(JAAS)API(這裏是一個教程鏈接:http://docs.oracle.com/javase/6/docs/technotes/guides/security/jaas/tutorials/GeneralAcnOnly.html)JAAS和回調處理程序是以編程方式處理認證(和授權)的非抽象方式。許多健壯的框架基於這個JAVA API,所以如果你仍然在爲這個問題而努力,那麼可能值得一看。

1

在我看來,使用j_security_check url登錄usernamepassword似乎是一個很大的安全性的可靠性。

相反,您可以執行以下步驟:

  • 創建一個單獨的JSP具有形式
  • j_security_check URL該表單POST用戶名和密碼
  • 可以動態包括這個JSP
  • 這個JSP可以有可以POST這個表單的onload(JS)函數。

以這種方式它將是安全的。