Java Spring安全性:使用数据库进行身份验证

Java Spring安全性:使用数据库进行身份验证,java,mysql,spring,spring-security,Java,Mysql,Spring,Spring Security,我采用这种方式连接并从数据库检索我的用户: @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired DataSource dataSource; @Autowired public void configAuthentication(AuthenticationManagerBuilder auth) throws Ex

我采用这种方式连接并从数据库检索我的用户:

 @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\u roles将是“ROLE\u user”或“ROLE\u ADMIN”。 我想将此字段更改为布尔值,其中0表示角色\管理员,1表示角色\用户

由于限制,我无法保留我的用户角色


如何执行此操作?

您可以调整查询,将0映射到“角色\用户”,将1映射到“角色\管理员”


请不要忘记,通常管理员也是用户。是否有一个权限标记可以同时获得角色\管理员和角色\用户授权?您可以在预授权或安全批注中检查和设置条件。确定。它不能解决我关于“处理布尔值”的主要问题。但这是一个很好的信息。我不建议在角色中使用布尔值,因为将来如果有更多,那么您也会遇到问题。此外,一个用户可以有多个角色。理想的做法是保留一个新的角色表,并与用户建立多对一的关联。通过这种方式,可以检索每个用户的角色。不起作用:/但是我想这是一种很好的搜索方式。您知道如何在线测试这些请求吗?仍然不知道我为什么要做“WHERE login=?”什么意思是“不工作”?(代码中没有login=?)我不认为在线测试数据库查询有什么意义
.authoritiesByUsernameQuery(
"select username, case when role=1 then 'ROLE_USER' else 'ROLE_ADMIN' as role from user_roles where username=?")