使用用户名或电子邮件的Spring Security

标签 spring authentication spring-mvc spring-security

我在Spring MVC应用程序中使用Spring Security。
JdbcUserDetailsManager使用以下用于身份验证的查询初始化:

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

当局正在这里加载:
select u.username, a.authority from user u join authority a on u.userId = a.userId where username = ?

我想这样做,以便用户可以同时使用用户名和电子邮件登录。有没有办法修改这两个查询来实现这一点?还是有更好的解决方案?

最佳答案

不幸的是,没有简单的方法可以通过更改查询来做到这一点。问题是,Spring Security希望按用户名查询的用户和按用户名授权的用户具有单个参数(用户名),因此,如果您的查询包含两个参数,例如

username = ? or email = ?

查询将失败。

您可以做的是实现自己的 UserDetailsS​​ervice ,该查询将执行一个(或多个)查询以按用户名或电子邮件搜索用户,然后将此实现用作您的Spring安全配置中的身份验证提供者,例如
  <authentication-manager>
    <authentication-provider user-service-ref='myUserDetailsService'/>
  </authentication-manager>

  <beans:bean id="myUserDetailsService" class="xxx.yyy.UserDetailsServiceImpl">
  </beans:bean>

关于使用用户名或电子邮件的Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122756/

相关文章:

spring - @Autowired 对象在一个类中获得空值,而在另一个类中成功连接

java - Spring Data MongoDB 排序性能

c# - ASP.NET HeadLoginView 注销 单击。也退出其他本地网站

azure - 具有 Http Azure 功能的 Http 过滤器

java - 解决jsp中css的路径

java - 如何在Spring框架和EJB3之间做出选择

java - SpringMVC : how to get the value of @RequestMapping in the function

apache - 在 Apache 上强制使用 SSL,使用 Auth 和 Canonical 重定向

java - 捕获 Spring MVC 最大上传大小错误

java - Spring:application+web context应该怎么组织?