我有一个具有属性的实体User
:
id
username
password
firstname
lastname
userrole
属性userrole
的类型为enum
而不是Set
,因此1个用户角色/用户。
现在我想进行JDBC身份验证。
现在我有:
auth
.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select username, password from user where username=?")
.authoritiesByUsernameQuery("select username, userrole from user where username=?");
但这不起作用。
如何制定.usersByUsernameQuery("...")
和.authoritiesByUsernameQuery("...");
中的查询?
错误讯息:
引起:org.h2.jdbc.JdbcSQLException:参数“columnIndex”不允许值“3” 参数“columnIndex”的值“3”无效[90008-192] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)〜[h2-1.4.192.jar:1.4.192] at org.h2.message.DbException.get(DbException.java:179)〜[h2-1.4.192.jar:1.4.192] at org.h2.message.DbException.getInvalidValueException(DbException.java:228)〜[h2-1.4.192.jar:1.4.192] at org.h2.jdbc.JdbcResultSet.checkColumnIndex(JdbcResultSet.java:3172)〜[h2-1.4.192.jar:1.4.192] 在org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:3200)〜[h2-1.4.192.jar:1.4.192] at org.h2.jdbc.JdbcResultSet.getBoolean(JdbcResultSet.java:541)〜[h2-1.4.192.jar:1.4.192] 在org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl $ 1.mapRow(JdbcDaoImpl.java:223)〜[spring-security-core-4.1.3.RELEASE.jar:4.1.3.RELEASE] 在org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl $ 1.mapRow(JdbcDaoImpl.java:218)〜[spring-security-core-4.1.3.RELEASE.jar:4.1.3.RELEASE] 在org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)〜[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE] 在org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)〜[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE] 在org.springframework.jdbc.core.JdbcTemplate $ 1.doInPreparedStatement(JdbcTemplate.java:697)〜[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE] 在org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)〜[spring-jdbc-4.3.3.RELEASE.jar:4.3.3.RELEASE] ...省略了65个常见帧
答案 0 :(得分:0)
用户的查询需要3个参数,请参阅Spring Security Reference:
- users-by-username-query 一个SQL语句,用于在给定用户名的情况下查询用户名,密码和启用状态。默认为
select username, password, enabled from users where username = ?