我正在尝试创建一个具有User
的应用程序,该应用程序可以被分配Tasks
。我正在使用Spring Security对应用程序进行身份验证。为了避免混淆,我将SpringSecurity用户表重命名为app_users
。
1.我的users
表和app_users
不同。我的users
表只存储任务用户数据的Map<--->。app_users
是sprint安全表。
- 我对AuthManagers/UserDetailsService/SecurityConfig感到困惑。
- 我想做的是-我的
users
表不会有任何行。在app_users
中只有一个用户admin
,并且用户将拥有ROLE_ADMIN
权限。 - 因此,使用此
admin
用户,我将尝试创建用户-api/v1/signup
POST - 我在配置
AuthenticationManager
时遇到问题。SecurityConfig
看起来像-
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private final UserDetailsServiceImpl userDetailsService;
private final JwtTokenProvider jwtProvider;
@Autowired
protected SecurityConfig(UserDetailsServiceImpl userDetailsService, JwtTokenProvider jwtProvider) {
this.userDetailsService = userDetailsService;
this.jwtProvider = jwtProvider;
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/api/v1/signup").permitAll()
.requestMatchers("/api/v1/login").permitAll()
.requestMatchers("/api/admin/**").hasRole("ADMIN")
.requestMatchers("/api/user/**").hasRole("USER")
.anyRequest().authenticated()
);
return http.build();
}
@Bean
public AuthenticationManager configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
return auth.build();
}
}
字符串AuthenticationManager configure(AuthenticationManagerBuilder auth)
已被弃用。如何使用spring-security-web 6.1.5
配置AuthManager?
这是我的GitHub仓库-https://github.com/yadavvi91/taskscheduler
随意给予给予任何其他意见的项目及其设计。
TLDR关于我的项目-
- dockercompose.yml for postgres+redis+springbootapp
- openapi.yml用于合约优先开发
- 用于表users、tasks、task_status的flyway脚本
- SecurityConfig用于基于JWT令牌的身份验证。令牌存储在Redis中。除了以JWT格式发送之外,它们没有太多信息。
1条答案
按热度按时间4uqofj5v1#
正如评论中所建议的,尝试:
字符串
另一种可能性(在阅读https://www.baeldung.com/spring-security-multiple-auth-providers之后,我成功地使用了它):
型