mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-06-27 14:22:47 +00:00
Optimize SecurityReactorContextConfiguration
Issue gh-7422
This commit is contained in:
parent
3670888616
commit
0fea57d6a1
@ -23,7 +23,6 @@ import org.springframework.context.annotation.Bean;
|
|||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.util.CollectionUtils;
|
|
||||||
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.RequestContextHolder;
|
||||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||||
import reactor.core.CoreSubscriber;
|
import reactor.core.CoreSubscriber;
|
||||||
@ -70,7 +69,7 @@ class SecurityReactorContextConfiguration {
|
|||||||
Operators.liftPublisher((pub, sub) -> createSubscriberIfNecessary(sub));
|
Operators.liftPublisher((pub, sub) -> createSubscriberIfNecessary(sub));
|
||||||
|
|
||||||
Hooks.onLastOperator(SECURITY_REACTOR_CONTEXT_OPERATOR_KEY, pub -> {
|
Hooks.onLastOperator(SECURITY_REACTOR_CONTEXT_OPERATOR_KEY, pub -> {
|
||||||
if (CollectionUtils.isEmpty(getContextAttributes())) {
|
if (!contextAttributesAvailable()) {
|
||||||
// No need to decorate so return original Publisher
|
// No need to decorate so return original Publisher
|
||||||
return pub;
|
return pub;
|
||||||
}
|
}
|
||||||
@ -91,6 +90,22 @@ class SecurityReactorContextConfiguration {
|
|||||||
return new SecurityReactorContextSubscriber<>(delegate, getContextAttributes());
|
return new SecurityReactorContextSubscriber<>(delegate, getContextAttributes());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean contextAttributesAvailable() {
|
||||||
|
HttpServletRequest servletRequest = null;
|
||||||
|
HttpServletResponse servletResponse = null;
|
||||||
|
ServletRequestAttributes requestAttributes =
|
||||||
|
(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
||||||
|
if (requestAttributes != null) {
|
||||||
|
servletRequest = requestAttributes.getRequest();
|
||||||
|
servletResponse = requestAttributes.getResponse();
|
||||||
|
}
|
||||||
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
if (authentication != null || servletRequest != null || servletResponse != null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private static Map<Object, Object> getContextAttributes() {
|
private static Map<Object, Object> getContextAttributes() {
|
||||||
HttpServletRequest servletRequest = null;
|
HttpServletRequest servletRequest = null;
|
||||||
HttpServletResponse servletResponse = null;
|
HttpServletResponse servletResponse = null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user