users-by-username-query 不返回任何结果 [英] users-by-username-query returns no results
问题描述
我正在尝试从数据库获取身份验证角色.表格在那里,这是我的背景:
I am trying to get authentication roles from DB. Tables are there, and here is my context:
<!-- Configures in-memory implementation of the UserDetailsService implementation -->
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="select * from users where email=?"
authorities-by-username-query="select u.email, ur.authority from users u, usersroles ur where u.id = ur.userid and u.email = ?"
/>
</security:authentication-provider>
</security:authentication-manager>
用户通过电子邮件进行身份验证.在数据库控制台中执行此查询时,它返回一个对象,但是当我查看日志时,我发现:
The user is authenticated by email. When doing this query in DB console, it returns one obejct, however when I look into logs, I find:
16:18:55,517 DEBUG JdbcTemplate:637 - Executing prepared SQL query
16:18:55,518 DEBUG JdbcTemplate:572 - Executing prepared SQL statement [select * from users where email=?]
16:18:55,519 DEBUG DataSourceUtils:110 - Fetching JDBC Connection from DataSource
16:18:55,519 DEBUG DriverManagerDataSource:162 - Creating new JDBC DriverManager Connection to [jdbc:h2:file:../lib/Money]
16:18:55,582 DEBUG DataSourceUtils:327 - Returning JDBC Connection to DataSource
16:18:55,607 DEBUG JdbcUserDetailsManager:154 - Query returned no results for user ''
16:18:55,610 DEBUG DaoAuthenticationProvider:134 - User '' not found
16:18:55,610 DEBUG UsernamePasswordAuthenticationFilter:346 - Authentication request failed: org.springframework.security.authentication.BadCredentialsException: Bad credentials
我做错了什么?
用户和密码是从前端代码发送的.我想一切都很好.我在那里发送了一个带有用户名和密码的简单 JSON.我猜 autenticationManager 有问题.代码如下:
User and password are sent from frontend code. Everything is fine in request I guess. I send a simple JSON there with username and password. I gues there's something wrong with autenticationManager. Here is the code:
<!-- Configures a custom login filter bean -->
<bean id="loginFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<property name="authenticationManager" ref="authenticationManager"/>
<property name="authenticationFailureHandler" ref="restAuthenticationFailureHandler"/>
<property name="authenticationSuccessHandler" ref="restAuthenticationSuccessHandler"/>
<property name="filterProcessesUrl" value="/api/login/"/>
<property name="usernameParameter" value="username"/>
<property name="passwordParameter" value="password"/>
<property name="postOnly" value="true"/>
</bean>
推荐答案
尝试通过用户名查询写入用户,使其返回3个参数的顺序:
Try to write the user by username query so that it return 3 parameter in this order:
- 用户名
- 密码
- 启用
例如:
<security:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT username, password, true FROM users WHERE email=?"
authorities-by-username-query="select u.email, ur.authority from users u, usersroles ur where u.id = ur.userid and u.email = ?"
/>
这篇关于users-by-username-query 不返回任何结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!