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=?")