Spring Security:配置(AuthenticationManagerBuilder auth)

Posted

技术标签:

【中文标题】Spring Security:配置(AuthenticationManagerBuilder auth)【英文标题】:Spring Security: configure(AuthenticationManagerBuilder auth) 【发布时间】:2017-08-13 04:29:35 【问题描述】:

我有一个带有属性的实体User

id username password firstname lastname userrole

属性userroleenum 的类型,而不是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] 在 org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[h2-1.4.192.jar:1.4.192] 在 org.h2.message.DbException.get(DbException.java:179) ~[h2-1.4.192.jar:1.4.192] 在 org.h2.message.DbException.getInvalidValueException(DbException.java:228) ~[h2-1.4.192.jar:1.4.192] 在 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] 在 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】:

查询用户需要3个参数,见Spring Security Reference:

users-by-username-query 用于查询用户名、密码和给定用户名的启用状态的 SQL 语句。默认是

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

【讨论】:

以上是关于Spring Security:配置(AuthenticationManagerBuilder auth)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security 入门(1-11)Spring Security - 匿名认证

Spring security UsernamePasswordAuthenticationToken 始终返回 403:用户凭据已过期

在运行时延迟初始化 Spring Security + 重新加载 Spring Security 配置

spring security4.2.2的maven配置+spring-security配置详解+java源码+数据库设计

Spring Security:如何将两个应用程序与单独的 Spring Security 配置集成?

spring-security-oauth2中的HttpSecurity配置问题