posts - 23,comments - 12,trackbacks - 0

          Translated by Caiyi0903(Willpower),2004.4.23

          在任何一種WEB應(yīng)用開發(fā)中,不論大中小規(guī)模的,每個開發(fā)者都會遇到一些需要保護程序數(shù)據(jù)的問題,涉及到用戶的LOGIN ID和PASSWORD。那么如何執(zhí)行驗證方式更好呢?實際上,有很多方式來實現(xiàn)。在本文里,我們不會把所有的驗證方法都考慮到,我們的目的是讓你學(xué)會如何以最簡單最方便的驗證方法來完成。下面將討論基本的(BASIC)和基于表單的(FORM-BASED)驗證方式。我們考慮使用TOMCAT作為WEB SERVER,它通過server.xml和web.xml文件提供基本的和基于表單的驗證。JSP頁面中的j_security_check 表單(for FORM-based) 需要兩個參數(shù):j_username和j_password。它們指定了在SQL數(shù)據(jù)庫中的登陸角色。你能夠看到,它的彈性化,可用性和必要性。

          第一步,我們要下載TOMCAT和MYSQL,前者用來做WEB SERVER,后者用來做SQL SERVER。還要下載JDBCRealm工具,它在TOMCAT中使用,用來做MYSQL連接器,連接MYSQL數(shù)據(jù)庫的。

          我們假設(shè)你已經(jīng)安裝了TOMCAT和MYSQL,那么我們開始從SERVER的配置入手了。當(dāng)然,你還需要安裝JAVA的MYSQL連接驅(qū)動,我強烈建議只使用穩(wěn)定的驅(qū)動版本,因為在有些情況下,alpha/beta版本的驅(qū)動不能正常工作。

          下面我們來操作SQL數(shù)據(jù)庫。老實說,MYSQL和TOMCAT是相當(dāng)好的工具,它們都是跨平臺的,不管你的操作系統(tǒng)是WINDOWS還是類似UNIX/LINUX的,它們都能正常運行。因此,不論運行環(huán)境,它們的配置過程都是絕對一樣的。

          MySQL
          在命令行中執(zhí)行mysql 客戶端命令,然后輸入:

          create database weblogin;
          這個將為你創(chuàng)建一個weblogin數(shù)據(jù)庫,它將保存用戶名和密碼以及角色等一切信息。你對數(shù)據(jù)庫所做的任何改變都會直接立即反映出來。比如說添加用戶,改變用戶密碼和角色等。


          create table users (
             login varchar (15) not null,
             pass varchar (15) not null,
             primary key (login)
          );

          我們創(chuàng)建一個users表用來保存用戶的LOGIN和PASSWORD:


          create tables groups (
             login varchar (15) not null,
             group varchar (15) not null,
             primary key (login, group)
          );

          如你看到的,我們要在group表里保存login屬于哪個group的信息。下面,我們要插于一些數(shù)據(jù)用來測試使用,并完成MYSQL的配置工作:

          insert into users  ('green', 'testpwd');
          insert into groups ('green', 'testgroup');


          現(xiàn)在,我們創(chuàng)建了一個用戶叫g(shù)reen,他的密碼是testpwd,他屬于testgroup這個用戶組。接著,輪到TOMCAT的配置了。

          Tomcat
          TOMCAT本身并沒有能力操作數(shù)據(jù)庫來實現(xiàn)身份驗證。但是可以依靠JDBCRealm。下面我們來使用它。

          下面我們從TOMCAT的\conf\server.xml文件來開始我們的配置。打開這個文件并找到下面的內(nèi)容:

          <Realm className="org.apache.catalina.realm.MemoryRealm" />
          刪除這一行,或者用<!-- ... --> 注釋掉它,我們要使用JDBCRealm。所以輸入下面的內(nèi)容:


          <Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
             driverName="org.gjt.mm.mysql.Driver"
             connectionURL="jdbc:mysql://localhost/weblogin?user=test&password=test"
             userTable="users" userNameCol="login" userCredCol="pass"
             userRoleTable="groups" roleNameCol="group" />

          下面我們對field參數(shù)做詳細(xì)講解:

          debug—這是我們設(shè)置的debug參數(shù),數(shù)字越高顯示信息越詳細(xì)。
          driverName—這個是MYSQL驅(qū)動的名字。要確保這個驅(qū)動的JAR包在TOMCAT的CLASSPATH中能夠找到它。
          connectionURL—這個是用來建立JDBC連接的數(shù)據(jù)庫URL。在這個field里,weblogin是我們數(shù)據(jù)庫的名字。user和password 是我們登陸數(shù)據(jù)庫的用戶數(shù)據(jù)。
          userTable—一個定義有userNameCol和userCredCol字段的表。
          userNameCol和userCredCol—users表里定義的login和pass。
          現(xiàn)在,我們完成了配置過程。下面,我們要配置WEB應(yīng)用程序來被這樣一個身份驗證方式保護起來。我們要舉兩個例子。最簡單的是基本身份驗證方式,然后就是基于表單的身份驗證。在第一種情況里,我們嘗試訪問受保護的數(shù)據(jù),將會有一個POP-UP窗口彈出提示你輸入你的login和password。在第二種情況里,我們會通過頁面的方式來讓你通過身份驗證。這個頁面的內(nèi)容可以是任意的,這個取決于你要使用怎么樣的驗證方式了。

          基本身份驗證方式(BASIC authorization method)
          我們假設(shè)應(yīng)用程序在TOMCAT的\webapps\webdemo, 我們要保護所有在admin 子目錄里的文件。我們必須打開它的\webapps\webdemo\WEB-INF\web.xml文件,輸入下列內(nèi)容:


          <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>testgroup</role-name>
             </auth-constraint>
          </security-constraint>
          <login-config>
             <auth-method>BASIC</auth-method>
             <realm-name>Web Demo</realm-name>
          </login-config>

          讓我們來看看剛才輸入的內(nèi)容。我們?yōu)閼?yīng)用程序創(chuàng)建了一個web-resource-name并映射到login-config 。我們還定義了url-pattern, 它指明你受保護程序的路徑。在login-conf中,我們定義了一個BASIC auth-method。

          很簡單,對嗎?不要忘記了,在使改變生效前要停止并重啟TOMCAT。

          表單身份驗證方式(FORM-based authorization method)
          對于這種方式,我們僅僅只需要:

          修改\webapps\webdemo\WEB-INF\web.xml
          創(chuàng)建一個登陸用的JSP頁面, 用戶將在這里的HTML表單中輸入他的登陸ID和密碼
          創(chuàng)建一個JSP error頁面,一旦驗證失敗,用戶將跳到該頁面
          如果你先嘗試使用BASIC驗證方式,你只需要改變login-config 為下面那一段代碼。否則,你需要輸入security-constraint代碼段。使用下面的login-config:


          <login-config>
             <auth-method>FORM</auth-method>
             <realm-name>Web Demo</realm-name>
             <form-login-config>
                <form-login-page>/admin/login.jsp</form-login-page>
                <form-error-page>/admin/error.jsp</form-error-page>
             </form-login-config>
          </login-config>

          我們設(shè)置表單的auth-method并定義了form-login-config。這個將使得TOMCAT使用 \admin\login.jsp頁面來讓用戶登陸,使用\admin\error.jsp頁面來處理登陸失敗。

          你可以使用任何你想要的出錯信息。頁面唯一需要的就是下面的HTML表單標(biāo)簽,你要插到頁面中:


          ...
          <form method="POST" action="j_security_check">
             <input type="text" name="j_username">
             <input type="text" name="j_password">
             <input type="submit" value="Log in">
          </form>
          ...

          布局,風(fēng)格,或其他所有你喜歡的。這個error頁面能夠做成任何你想要的。無非就是通知用戶,驗證失敗了。

          OK,全部完成了。你需要停止和重啟一遍TOMCAT使得改變生效。

          ? Olexiy Prokhorenko, http://www.7dots.com/resume/
          Co-author: Alexander Prohorenko

          posted on 2005-08-17 10:07 my java 閱讀(742) 評論(0)  編輯  收藏 所屬分類: java身份認(rèn)證轉(zhuǎn)帖
          主站蜘蛛池模板: 蕉岭县| 洮南市| 印江| 开原市| 贵阳市| 株洲市| 衡阳市| 芜湖县| 大方县| 偃师市| 大连市| 峨边| 昌图县| 兴国县| 淮阳县| 那坡县| 怀集县| 土默特左旗| 乡宁县| 慈溪市| 确山县| 土默特左旗| 金溪县| 乌拉特前旗| 塔河县| 二手房| 丰顺县| 平安县| 重庆市| 顺义区| 黄山市| 怀来县| 南汇区| 利津县| 永善县| 沈丘县| 大邑县| 罗甸县| 曲周县| 吉水县| 祁门县|