【发布时间】:2018-08-29 11:45:47
【问题描述】:
我有两个表:用户和管理员。我有一个用户名、密码和角色。我想使用管理员或用户的任何一种形式登录。我试过这个:
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {
auth.
jdbcAuthentication().dataSource(dataSource)
.usersByUsernameQuery("SELECT username,password FROM user WHERE username =? UNION SELECT username,password FROM admin WHERE username =? ")
.authoritiesByUsernameQuery("SELECT username,role FROM user WHERE username =? UNION SELECT username,role FROM admin WHERE username =? ");
}
,但我遇到了异常:
org.springframework.security.authentication.InternalAuthenticationServiceException: PreparedStatementCallback; bad SQL grammar [SELECT username,password FROM user WHERE username =? UNION SELECT username,password FROM admin WHERE username =? ]; nested exception is java.sql.SQLException: No value specified for parameter 2
那么我怎样才能通过两种对象类型(用户、管理员)的身份验证登录系统?
【问题讨论】:
-
您在查询中定义了 2 个参数,在 UNION 子句之前和之后,但 spring 只将用户名传递给其中一个参数,用于角色查询
标签: java spring-security