Spring Security:configure(AuthenticationManagerBuilder auth)

时间:2017-03-21 13:15:32

标签: spring spring-security h2

我有一个具有属性的实体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个常见帧

1 个答案:

答案 0 :(得分:0)

用户的查询需要3个参数,请参阅Spring Security Reference

  
      
  • users-by-username-query 一个SQL语句,用于在给定用户名的情况下查询用户名,密码和启用状态。默认为
  •   
     

select username, password, enabled from users where username = ?