gpt4 book ai didi

java - Spring Boot 中的 JDBC 授权

转载 作者:行者123 更新时间:2023-11-29 10:38:17 25 4
gpt4 key购买 nike

我正在尝试使用 JDBC (mysql) 设置简单的身份验证和授权。这是我用来初始化用户的 SQL:

INSERT INTO users(username,password,enabled)
VALUES ('admin','admin', true);
INSERT INTO user_roles (username, role)
VALUES ('admin', 'USER');
INSERT INTO user_roles (username, role)
VALUES ('admin', 'ADMIN');

数据源属性:

spring.datasource.password=xxxx 
spring.datasource.url=jdbc:mysql://localhost:3306/spring
spring.datasource.username=xxx

安全配置:

 class ApplicationSecurity extends WebSecurityConfigurerAdapter {

@Autowired
private DataSource source;

@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/uploadfiles/**").access("hasRole('ADMIN')");
http.authorizeRequests().antMatchers("/fonts/**").permitAll();
http.authorizeRequests().antMatchers("/").permitAll();
http.authorizeRequests().anyRequest().fullyAuthenticated().and()
.formLogin().loginPage("/login").defaultSuccessUrl("/").failureUrl("/login?error").permitAll().and()
.logout().permitAll();
}

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(source).
usersByUsernameQuery("select username,password,enabled from users where username=?").
authoritiesByUsernameQuery("select username, role from user_roles where username=?");
}

}

登录效果很好,但当尝试以管理员身份打开/uploadfiles 链接时,我收到 403 响应。我还尝试检查角色是否正确,确实如此。我使用以下代码检查了它们:

Collection<SimpleGrantedAuthority> authorities = (Collection<SimpleGrantedAuthority>)    SecurityContextHolder.getContext().getAuthentication().getAuthorities();
authorities.forEach(authority -> logger.info(authority.toString()));

当我设置 inMemoryAuthentication 时,它会按预期工作,所以我猜它必须是 mysql 配置的东西。有人看到我的代码中有错误吗?

最佳答案

将您的权限 SQL 查询修改为:

select username, concat('ROLE_',role) from user_roles where username=?

角色是前缀为“ROLE_”的权限。

关于java - Spring Boot 中的 JDBC 授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46016054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com