通常對于一般的web應用程式,都是自己寫驗證,輸入使用者名和密碼,然後到資料庫去驗證,然後傳回。但是對于安全性要求較高的應用,自己寫的安全驗證則會出現許多沒考慮到的地方,這時應該使用安全架構。
我使用的是struts架構,伺服器是weblogic8.14,配置了基于FORM的驗證方式,具體配置如下:
1、目錄結構:根目錄檔案:index.jsp,login.html,error.jsp
admin目錄:存放系統子產品業務頁面的路徑
pages目錄:存放公用頁面的路徑
2、login.html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/url]">
<html xmlns="[url]http://www.w3.org/1999/xhtml[/url]">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css">
body{
margin:0;
font-size:12px;
height:100%;
}
#content {
position:absolute;
left:58%;
top:42%;
width:190px;
height:104px;
z-index:1;
.int{
width:120px;
height:13px;
border:#c0c0c0 1px solid;
.btn{padding-top:2px;}
</style>
</head>
<body>
<div id="content">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<form method="post" action="j_security_check">
<tr>
<td height="25" colspan="2" align="right" valign="bottom"> </td>
</tr>
<td width="60" height="35" align="right" valign="bottom">使用者id:</td>
<td width="120" valign="bottom"><input type="text" name="j_username" id="j_username" class="int"/></td>
</tr>
<tr>
<td width="60" height="25" align="right" valign="bottom">密碼:</td>
<td valign="bottom"><input type="password" name="j_password" id="j_password" class="int"/></td>
<td colspan="2"> </td>
<td height="30" colspan="2" align="right">
<input type="submit" id="btnok" value="登入" class="btn"/>
<input id="reset" type="reset" value="取消" class="btn"/></td>
</form>
</table>
</div>
<table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><table width="601" height="364" border="0" align="center" cellpadding="0" cellspacing="0" background="p_w_picpaths/login.jpg">
<tr>
<td> </td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
需要注意的是這裡的使用者名,密碼和送出頁面必須固定為j_username,j_password,j_security_check見檔案的反顯部分。
3、error.jsp
<%@ page contentType="text/html; charset=GBK" %>
<html>
<title>
error
</title>
<body bgcolor="#ffffff">
<h1>
Login error!
</h1>
4、在web.xml裡配置要保護的資源
<security-constraint>
<web-resource-collection>
<web-resource-name>admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<http-method>PUT</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<web-resource-name>pages</web-resource-name>
<url-pattern>/pages/*</url-pattern>
<web-resource-name>indexservlet</web-resource-name>
<url-pattern>/indexservlet</url-pattern>
<web-resource-name>index</web-resource-name>
<url-pattern>/index.jsp</url-pattern>
<auth-constraint>
<role-name>mgr</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
這裡我配置了對admin目錄、index.jsp、indexservlet的保護,隻允許mgr角色可以通路,注意不要對error.jsp也保護了,否則會導緻登陸失敗時達不到錯誤頁面。
5、配置角色:
mgr是這樣配置的:
在web.xml裡加入:
<security-role>
<role-name>mgr</role-name>
</security-role>
在weblogic.xml裡加入角色映射:
<security-role-assignment>
<principal-name>admin</principal-name>
</security-role-assignment>
該段表示将weblogic伺服器裡配置的admin使用者映射為這裡的mgr角色。
6、配置驗證方式:
在web.xml裡加入
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login.html</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>
</login-config>
現在,打包釋出你的程式,輸入任何保護的資源,在未驗證的情況下就會跳轉到登陸頁面了,進而完成對資源的保護。