根据springboot中的请求参数springSecurity切换认证表

时间:2015-09-25 02:54:49

标签: spring spring-mvc spring-security spring-boot

我正在springboot中编写一个程序,用户可以通过两种方式访问​​应用程序,结合使用用户名/密码或使用单独的16位字母数字字符,它位于单独的表中。 我很乐意使用用户名/密码的组合或一次使用16位字符来记录用户。但我需要的是能够在基于用户和基于字符的登录之间切换。我已经考虑了基于过滤器的方法,但不知道如何启动它可以让任何人指向正确的方向。 我想要的是这样的: -

if(request.getParameter("userType").equals("userbased")){
auth.jdbcAuthentication().dataSource(dataSource)
            .usersByUsernameQuery(
                    "select username,password,enabled from user where username=?")
            .authoritiesByUsernameQuery(
                    "SELECT u.username,r.role FROM user u  INNER JOIN user_role ur ON u.id = ur.user_id INNER JOIN role r ON ur.role_id = r.id WHERE u.username=?; ");
}
else if(request.getParameter("userType").equals("tokenNo")){
   //token based login logic with structure same as above
}

1 个答案:

答案 0 :(得分:0)

实际上你不必实施任何新的东西。如果你看一下ProviderManager的文档,你会看到这个解释为:

  

通过列表来迭代身份验证请求   AuthenticationProviders。

     

AuthenticationProviders通常按顺序尝试,直到提供   非空响应。非空响应表示提供者具有   决定身份验证请求的权限,不再进一步   提供商尝试。

因此,您可以定义多个AuthenticationProviders并根据您的不同需求进行配置。一个典型的用例是真实用户authManager(用户名+密码),另一个用于应用程序(使用基于令牌的访问)。我假设你在这里实现了同样的要求,但即使这个假设是错误的,解决方案仍然适用于你。