[請教]應用 JDBCRealm 強制安全時出現SQLException.

Juniper發表於2004-08-22
參考在書城裡抄的一些資料,在Tomcat5.0上實驗 JDBCRealm 強制安全,保障web應用的安全。
但在配置的時候出現了莫名的SQLException,還請各位DX指點!

配置如下:
1、確定要保護的web應用的path為:/testing/* 即:要訪問http://www.sdg.com/testing/ 下所有的應用,都必須透過
JDBCRealm的強制驗證。

2、已經配置好了SQL Server,建一資料庫Panabia,2個表:users,groups.分別儲存使用者、使用者-角色資訊。SQL Server
JDBC驅動程式已經複製至%TOMCAT_HOME%\common\lib 下。經試驗,JDBC連線SQL Server正常。

3、配置\ROOT\WEB-INF\下的web.xml,新增security-constraint配置段,配置為BASIC方式驗證。
如下所示:

<security-constraint>
   <web-resource-collection>
      <web-resource-name>ROLE TEST</web-resource-name>
      <url-pattern>/testing/*</url-pattern>
   </web-resource-collection>
   <auth-constraint>
      <role-name>admin</role-name>
   </auth-constraint>
</security-constraint>

<login-config>
   <auth-method>BASIC</auth-method>
   <realm-name>ROLE TEST</realm-name>
</login-config>
<p class="indent">

4、配置Tomcat的 server.xml檔案,將原有的 Realm 註釋掉,新增如下:

<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
 driverName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
 connectionURL="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=Panabia;User=super;Password=fuckjapan"
 userTable="users" userNameCol="username" userCredCol="password"
 userRoleTable="groups" roleNameCol="role"/>
 

5、重新啟動Tomcat,訪問http://www.sdg.com/testing/src.jsp 時,彈出對話方塊,要求輸入使用者名稱與密碼(我本來以為
已經大功告成了...誰知道.....)
我輸入了屬於admin角色的帳戶:username:super password:fuckjapan
但是始終不能透過驗證,最後來一個 HTTP 401 錯誤--------

**檢視Tomcat的 log檔案,發現有以下的SQLException:

2004-08-22 14:14:49 JDBCRealm[]: Username super successfully authenticated
2004-08-22 14:14:49 JDBCRealm[]: Exception performing authentication
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Can't start a cloned connection while in manual transaction mode.
	at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)

//........(略)

上面的"Username super successfully authenticated" 說明 JDBCRealm還是工作正常的,起碼驗證了super帳號--

但為什麼又會出現"Exception performing authentication"?
百思不得其解------還請各位DX指點迷津!THKS。

相關文章