【发布时间】:2013-12-08 15:30:32
【问题描述】:
我正在尝试从 DB 获取身份验证角色。表格在那里,这是我的上下文:
<!-- 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>
用户通过电子邮件进行身份验证。在数据库控制台中执行此查询时,它返回一个对象,但是当我查看日志时,我发现:
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 有问题。代码如下:
<!-- 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>
【问题讨论】:
-
for user ''这是你的线索...电子邮件不知何故未设置 -
向我们展示一些代码,因为执行的查询有问题,如您的日志中所述
-
@Ben 我用更多信息更新了问题
-
保存用户的表是否应该有列用户名?我的没有。
-
我找到了这个问题的答案。我发送 JSON 对象的问题,参数应该作为 http params (AngularJS) > $http({method: 'POST', url: 'api/login/', data : 'username=' + $scope. user.username + &password=' + $scope.user.password, headers:{'Accept': '/', 'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest'}}).success(function(budgetId) {