Spring對JDBC進(jìn)行了非常優(yōu)雅的封裝,通過一系列的模板方法,只需簡單的幾行代碼就可實(shí)現(xiàn)數(shù)據(jù)庫的訪問。通過Spring的JdbcTemplate訪問數(shù)據(jù)庫從而實(shí)現(xiàn)用戶驗(yàn)證。Access數(shù)據(jù)庫,建立表Account,包含兩個(gè)字段:
username:VARCHAR(20),主鍵; password:VARCHAR(20)。
然后輸入一些測試數(shù)據(jù),注冊到系統(tǒng)DSN,名字為Blog。接下來我們在Tomcat中配置一個(gè)名為“jdbc/blog”的DataSource如下:
如果你使用其他數(shù)據(jù)庫,只需要保證表的邏輯結(jié)構(gòu)和JDNI名“jdbc/blog”。在AccountManager中,使用JdbcTemplate訪問數(shù)據(jù)庫來驗(yàn)證用戶:
編譯運(yùn)行,輸入hello.c?username=xxx&password=xxx來測試用戶登錄,如果匹配數(shù)據(jù)庫中的記錄,會(huì)顯示出用戶名,否則可以看到authorization failed異常。要更友好的顯示登陸失敗,可以在Controller中導(dǎo)向一個(gè)login_failed.jsp并給出登陸失敗的原因。
下面來看這個(gè)AccountManager,很顯然在驗(yàn)證邏輯中寫入了JNDI查找DataSource的代碼,這將導(dǎo)致比較“生硬”的編碼。“依賴注入”此刻顯示出了威力:讓容器注入DataSource:
OK,現(xiàn)在這個(gè)AccountManager變得優(yōu)雅多了,現(xiàn)在如何配置DataSource的注入呢?Spring提供了一個(gè)DataSourceUtils類,通過靜態(tài)方法getDataSourceFromJndi來獲得容器中配置的DataSource。我們添加以下配置: