我的SpringWebFlux安全代码是,
@Bean
public SecurityWebFilterChain securitygWebFilterChain(final ServerHttpSecurity http) {
http.securityContextRepository(securityContextRepository);
return http.authorizeExchange().matchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
.pathMatchers(props.getSecurity().getIgnorePatterns()).permitAll().anyExchange().authenticated()
.and().formLogin()
.and().exceptionHandling()
.authenticationEntryPoint((exchange, exception) -> Mono.error(exception))
.accessDeniedHandler((exchange, exception) -> Mono.error(exception))
.and().build();
}
现在,我有下面的代码来获取登录用户的详细信息。
public Mono<AppUserDetails> getUser() {
Mono<Principal> principalMono = ReactiveSecurityContextHolder.getContext().map(SecurityContext::getAuthentication).cast(Principal.class);
principalMono.flatMap(principal -> {
if (principal instanceof AuthenticatedUserToken) {
final AppUserDetails user = ((AuthenticatedUserToken<?>) principal).getUser();
return Mono.just(user);
}
return Mono.error(() -> new IllegalArgumentException("Invalid access"));
}).switchIfEmpty(Mono.defer(() -> {
return Mono.empty();
}));
}
我有一个api来创建一个项目,项目表有audit列以及createdby user。我使用上面的代码(getuser()方法)检索登录的用户并从中获取userid。
现在,尝试通过postman测试这个api,只使用一个用户id为1的模拟用户,而不是使用真正的用户登录,因为前端还没有准备好。
如何在调用getuser()方法时使用mock user运行spring启动应用程序并返回mock user id,以便进行端到端测试。
1条答案
按热度按时间lskq00tm1#
我可以通过下面的代码实现这一点。
为mock user创建了一个基于条件的类。