我正在尝试使用Spring WebFlux Framework和MongoDB实现Web应用程序。一切都按预期工作,但是即使数据库中的 enabled 属性设置为 false ,它仍然允许我成功登录。事实并非如此。我的安全配置如下-
@Configuration
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
public class WebfluxSecurityConfig {
@Autowired
private Constants constants;
@Autowired
private UserRepository userRepo;
@Bean
public ReactiveUserDetailsService userDetailsService(UserRepository users) {
return (username) -> users.findByUsername(username)
.map(u -> new UserAuth(u.getUserId()
, u.getUsername()
, u.getPassword()
, u.isEnabled()
, !u.isAccountExpired()
, !u.isCredentialsExpired()
, !u.isAccountLocked()
, UserAuth.getGrantedAuthorities(u.getRoles().toArray(new String[0]))
, StringUtils.isEmpty(u.getAuthSalt()) ? u.getUsername() : u.getAuthSalt()
)
);
}
@Bean
public SecurityWebFilterChain springSecurityFilterChain3(ServerHttpSecurity http) {
http
.authorizeExchange()
.pathMatchers("/web/**").authenticated()
.pathMatchers("/**").permitAll()
.and().formLogin()
.loginPage("/login")
.and().logout()
.logoutUrl("/logout");
return http.build();
}
}
mongodb中的用户条目为-
{
"_id": "5d149e3b3c1206008cf56af9",
"username": "admin",
"password": "{noop}admin",
"firstName": "Admin",
"lastName": "1",
"email": "admin@eightfolds.in",
"enabled": false,
"accountLocked": true,
"roles": ["ADMIN"]
}
任何人都可以帮助我了解我在做什么错。
仍然无法弄清楚。
答案 0 :(得分:1)
感谢您举报。
您的配置没有错。检查用户帐户是否已禁用的行为尚不是WebFlux的一部分。
我在spring-security GitHub存储库上创建了issue,以添加此功能。