網上有很多關於此類文章,但是有很多文章將的含糊不清,讓人看了很是鬱悶,更有甚者竟然把沒有測試的文章也帖出來,真不知道這些人怎麼想的。。。哎~!
廢話少說,讓我們開始把~~!這些話上次已經說完了^_^
現在開始我們的Form-based Authentication吧,其實和BASIC基本上完全一樣,就是拷貝~
要搭建整個流程需要四個階段:
一、建立測試用數據庫
我們這裏用Mysql進行測試,其他數據庫完全一樣。
1、創建用戶表
CREATE TABLE users (
id int(11) NOT NULL auto_increment,
username varchar(20) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (id)
)
2、創建權限表(此事例中用不到)
CREATE TABLE roles(
id int(11) NOT NULL auto_increment,
rolename varchar(20) NOT NULL,
PRIMARY KEY (id)
)
3、創建用戶-權限對應表
CREATE TABLE user_roles (
id int(11) NOT NULL auto_increment,
username varchar(20) NOT NULL,
rolename varchar(20) NOT NULL,
PRIMARY KEY (id)
)
4、插入數據
insert into users(username,password) values('zhangdongyu', 'loveyuanyuan')
insert into roles(rolename) values('manager')
insert into user_roles(username,rolename) values('zhangdongyu', 'manager')
二、修改${tomcat}/conf/server.xml
找到
<!--
<Realm className="org.apache.catalina.realm.MemoryRealm" />
-->
在上面這句話下面添加一下內容:
<Realm
className="org.apache.catalina.realm.JDBCRealm"
debug="99"
driverName="org.gjt.mm.mysql.Driver"
connectionURL="jdbc:mysql://localhost/weblogin" <!--數據庫連接地址-->
connectionName="root" <!--數據庫用戶名-->
connectionPassword="123" <!--數據庫密碼-->
userTable="users" <!--用戶表-->
userNameCol="username" <!--用戶名列-->
userCredCol="password" <!--密碼列-->
userRoleTable="user_roles" <!--用戶權限對應表-->
roleNameCol="rolename" <!--權限列-->
/>
三、創建工程
在Eclipse創建一個web工程sercurityTest,在WebRoot下面創建一個文件夾admin(也可在裏面建立幾個文件),同時在根目錄種創建login.jsp和error.jsp
login.jsp
文件的內容如下,其中用戶名的name屬性j_username,密碼的name屬性j_password,表單的action屬性j_security_check,這三個屬性值不能變,固定。
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>緣雨測試</title>
</head>
<body>
<form method="POST" action="j_security_check">
<table>
<tr>
<td> 用戶名:</td>
<td><input type="text" name="j_username"></td>
</tr>
<tr>
<td> 密碼:</td>
<td><input type="text" name="j_password"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Log in"></td>
</tr>
<tr><td></td></tr>
</table>
</form>
</body>
</html>
error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>緣雨測試</title>
</head>
<body>
兄弟訪問失敗了~~!
</body>
</html>
在web.xml文件中添加以下片段:
<security-constraint>
<web-resource-collection>
<web-resource-name>Web Demo</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>manager</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>Web Demo</realm-name>
</login-config>
四、重啓Tomcat,使設置生效
總結測試:
通過上面的四部分配置,當你再次訪問程序中受保護的地址,如:http://localhost/sercurityTest/admin時回首先彈出登陸界面:
這時, 輸入用戶名:zhangdongyu 密碼:loveyuanyuan 纔可以進入admin目錄
以上程序經測試成功~小弟才疏學淺,希望高手不惜吝嗇批評指教~謝謝~