Пружинный загрузочный реактор ReactiveSecurityContextholder.getContext () всегда пустJAVA

Программисты JAVA общаются здесь
Anonymous
Пружинный загрузочный реактор ReactiveSecurityContextholder.getContext () всегда пуст

Сообщение Anonymous »

Я делаю аудиторию с подписанным токеном в печенье браузера. Я настроил веб -фильтр, чтобы захватить мой контекст безопасности cookie \ Propagate и ReactiveauthorizationManager , чтобы проверить подпись. Я столкнулся с проблемой, когда, независимо от того, что я делаю, я не могу, чтобы получить доступ к хранимую контекст из цепочки издателей. Я проверяю с отладчиком, используя ReactiveSecurityContexTholder.getContext (). DOONNEXT (SYSTEM.OUT :: PRINTLN) .SubScribe () и смотрю на консоль для вывода, что всегда отсутствует, потому что .getContext () всегда издает пустой . Googling ни к чему не взяла, поэтому любой совет помогает < /p>
мой конфигуратор безопасности < /p>

Код: Выделить всё

@Configuration
@EnableWebFluxSecurity
@RequiredArgsConstructor
@EnableReactiveMethodSecurity
public class SecurityConfig {
private final CookieAuthenticationFilter cookieAuthenticationFilter;
private final SecureTokenAuthManager secureTokenAuthManager;

@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {

return http
.csrf(ServerHttpSecurity.CsrfSpec::disable)
.securityContextRepository(new WebSessionServerSecurityContextRepository())
.authorizeExchange(exchange -> exchange
.pathMatchers("/api/ticket").permitAll()
.pathMatchers("/api/**").access(secureTokenAuthManager)
.anyExchange().permitAll()
)
.addFilterAt(cookieAuthenticationFilter, SecurityWebFiltersOrder.AUTHENTICATION)
.build();
}

}
< /code>
Мой веб-фильтр < /p>
@Component
@RequiredArgsConstructor
public class CookieAuthenticationFilter implements WebFilter {
public static final String TOKEN_COOKIE_NAME = "token";

@Override
public Mono filter(ServerWebExchange exchange, @NonNull WebFilterChain chain) {
var context = ReactiveSecurityContextHolder.withAuthentication(null);

Optional tokenCookie = Optional.ofNullable(exchange.getRequest().getCookies().getFirst(TOKEN_COOKIE_NAME));
if (tokenCookie.isPresent() && !tokenCookie.get().getValue().isBlank()) {
String tokenId = tokenCookie.get().getValue();
context = ReactiveSecurityContextHolder.withAuthentication(new SecureTokenAuthentication(tokenId));
}

return chain.filter(exchange)
.contextWrite(context);
}

}
< /code>
и мой контроллер < /p>
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/game")
public class GameController {
private final PlayerFacade playerFacade;

@GetMapping
public Mono getGameState() {
return ReactiveSecurityContextHolder.getContext()
.map(SecurityContext::getAuthentication)
.filter(it -> it instanceof SecureTokenAuthentication)
.filter(Authentication::isAuthenticated)
.map(it -> (SecureTokenAuthentication) it)
.map(SecureTokenAuthentication::getToken)
.map(ResponseEntity::ok)
.defaultIfEmpty(ResponseEntity.notFound().build());
}
}
Я получаю ошибку 404 каждый раз, потому что мой контекст безопасности всегда пуст (логика метода изменяется в целях тестирования)


Подробнее здесь: https://stackoverflow.com/questions/797 ... ways-empty

Вернуться в «JAVA»