,我有以下我的應用程序-config.xml中配置:Spring Security認證簡單的登錄
<security:http auto-config="true" />
<security:global-method-security secured-annotations="enabled" />
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="
select login, password
from accounts where login=? and password=?"
authorities-by-username-query="
select a.login, ar.authority from accounts a, account_roles ar
where a.account_id = ar.account_id and a.login =? "
/>
</security:authentication-provider>
</security:authentication-manager>
但是當我開始我的應用程序,它顯示我收到以下錯誤信息登錄:
原因:PreparedStatementCallback;未分類SQL的SQLException [選擇登錄名,>登錄名=>帳戶的密碼和 password =?]; SQL狀態[90012];錯誤代碼[90012];參數「#2」未設置爲 ; SQL語句:選擇登錄名,密碼從 login =?和密碼=? [90012-170];嵌套的異常是 org.h2.jdbc.JdbcSQLException:參數「#2」未設置; SQL 聲明:選擇登錄,密碼從帳戶登錄=?和 password =? [90012-170]
任何想法什麼是錯的?
我不完全確定安全:jdbc-user-service是如何工作的?它在我的select查詢中如何填入=?
我的數據庫定義爲:
CREATE TABLE accounts (
account_id VARCHAR NOT NULL,
login VARCHAR NOT NULL,
password VARCHAR NOT NULL,
PRIMARY KEY (account_id)
);
CREATE TABLE account_roles (
account_id VARCHAR NOT NULL,
authority VARCHAR NOT NULL,
PRIMARY KEY (account_id),
CONSTRAINT FK_account_roles FOREIGN KEY (account_id) REFERENCES accounts (account_id)
);
感謝
我也試過,並且得到這個消息: 原因:PreparedStatementCallback;未歸類SQLException for SQL [選擇登錄名,密碼從帳戶登錄=?限制1]; SQL狀態[90008];錯誤代碼[90008];參數「columnIndex」的值「3」無效[90008-170];嵌套異常是org.h2.jdbc.JdbcSQLException:參數「columnIndex」的值「3」無效[90008-170] P.S.我用我的數據庫模式更新了原文。 – 2013-05-12 13:04:37
這是通過應用程序配置,如果這有幫助:http://pastebin.com/NqptCiS4 – 2013-05-12 15:00:50
@ john-sam我已經更新了我的答案。查詢必須返回3個值:'login','password'和'enabled'屬性。因爲你的方案缺少'enabled'屬性,所以我修改了SQL查詢以始終返回'true'。 – 2013-05-12 16:13:13