Spring Security:使用数据库进行身份验证

时间:2015-10-13 13:54:11

标签: java mysql spring spring-security

我已经实现了这种方式来连接和检索我的数据库中的用户:

 @Configuration
 @EnableWebSecurity
 public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
DataSource dataSource;

@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth) throws Exception {

  auth.jdbcAuthentication().dataSource(dataSource)
    .usersByUsernameQuery(
        "select username,password, enabled from users where username=?")
    .authoritiesByUsernameQuery(
        "select username, role from user_roles where username=?");
}   

所以,我让我的用户拥有他们的角色。 在此示例代码中,列user_roles将为“ROLE_USER”或“ROLE_ADMIN”。 我想用一个布尔值来改变这个字段,其中ROLE_ADMIN为0,ROLE_USER为1。

由于约束,我无法保留我的user_roles。

我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

您可以使用CASE operator

调整查询以将0映射到'ROLE_USER',将1映射到'ROLE_ADMIN'
.authoritiesByUsernameQuery(
"select username, case when role=1 then 'ROLE_USER' else 'ROLE_ADMIN' as role from user_roles where username=?")