1

We have a custom SecurityService class that internally accesses the current SecurityContext and RequestAttributes via SecurityContextHolder and RequestContextHolder for every method call of the service. Imagine the custom class User returned from securityService.getUser();

Given the following code:

@DgsSubscription
public Publisher<String> test() {
    String s = securityService.getUser().getName();
    return Flux.interval(Duration.ofSeconds(5)).map(t -> s);
}

That periodically triggers the test subscription and returns the User name.

I get the following error when a client tries to subscribe:

Exception while fetching data (/test) : No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: In this case, use RequestContextListener or RequestContextFilter to expose the current request.

Apparently the test method is run in a new thread? How do I make both context available to this thread?

SecurityService is autowired into the Datafetcher.

0 Answers0