<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script> 完成了
第一個Acegi 程式 - 設定文件 中的文件設定,接下來完成必要的表單網頁,首先是/acegilogin.jsp:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head>
<title>Acegi 範例網頁 - 登入</title>
</head>
<body>
<h2>登入範例應用程式!</h2>
<br />
<form action="j_acegi_security_check" method="POST">
<table>
<tr>
<td>名稱:</td>
<td><input type='text' name='j_username' value=''></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type='password' name='j_password'></td>
</tr>
<tr>
<td><input name="reset" type="reset"></td>
<td><input name="submit" type="submit"></td>
</tr>
</table>
</form>
</body>
</html>
主要注意到粗體字的部份,j_acegi_security_check為
第一個Acegi 程式 - 設定文件 中authenticationProcessingFilter的filterProcessesUrl屬性所設定的名稱,而驗證時發送的使用者名稱與密碼,要以j_username與j_password請求參數送出。
如果想要在登入失敗時顯示錯誤訊息,可以檢查param.login_error是否為空,例如結合JSTL的話:
<c:if test="${not empty param.login_error}">
<font color="red">使用者名稱或密碼錯誤,請重新登入!<BR>
</font>
</c:if>
您也許想顯示最後一次登入失敗的使用者名稱,這個訊息是儲存在session之中,可以使用AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY作為KEY來取得這個值,例如:
<%@ page
import="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"%>
...
<input type='text' name='j_username'
<c:if test="${not empty param.login_error}">
value='<%= session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY) %>'
</c:if>
>
登入成功的話,可以顯示/WEB-INF/loginsuccess.jsp
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>登入成功</title>
</head>
<body>
<h1>歡迎 <%= session.getAttribute(AuthenticationProcessingFilter.ACEGI_SECURITY_LAST_USERNAME_KEY) %>
</h1>
</body>
</html>
接著,設置一個簡單的首頁,當使用者存取首頁時,直接轉頁至acegilogin.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=acegilogin.jsp">
</head>
<body>
<p>載入中...</p>
</body>
</html>
現在您可以啟動您的應用程式了,嘗試直接存取acegilogin.jsp並登入,關閉瀏覽器並清除快取,再嘗試直接存取/protected/下的資源,看看結果如何。