Skip to content

Commit 922e6de

Browse files
committed
Avoid filtering if selector header is not in use
1 parent 7ff915a commit 922e6de

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractSubscriptionRegistry.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.springframework.messaging.MessageHeaders;
2424
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
2525
import org.springframework.messaging.simp.SimpMessageType;
26+
import org.springframework.util.CollectionUtils;
27+
import org.springframework.util.LinkedMultiValueMap;
2628
import org.springframework.util.MultiValueMap;
2729

2830
/**
@@ -35,6 +37,10 @@
3537
*/
3638
public abstract class AbstractSubscriptionRegistry implements SubscriptionRegistry {
3739

40+
private static MultiValueMap<String, String> EMPTY_MAP =
41+
CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<String, String>(0));
42+
43+
3844
protected final Log logger = LogFactory.getLog(getClass());
3945

4046

@@ -104,7 +110,7 @@ public final MultiValueMap<String, String> findSubscriptions(Message<?> message)
104110
String destination = SimpMessageHeaderAccessor.getDestination(headers);
105111
if (destination == null) {
106112
logger.error("No destination in " + message);
107-
return null;
113+
return EMPTY_MAP;
108114
}
109115

110116
return findSubscriptionsInternal(destination, message);

spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
7272

7373
private String selectorHeaderName = "selector";
7474

75-
private ExpressionParser expressionParser = new SpelExpressionParser();
75+
private volatile boolean selectorHeaderInUse = false;
76+
77+
private final ExpressionParser expressionParser = new SpelExpressionParser();
7678

7779
private final DestinationCache destinationCache = new DestinationCache();
7880

@@ -143,6 +145,7 @@ protected void addSubscriptionInternal(String sessionId, String subsId, String d
143145
if (selector != null) {
144146
try {
145147
expression = this.expressionParser.parseExpression(selector);
148+
this.selectorHeaderInUse = true;
146149
if (logger.isTraceEnabled()) {
147150
logger.trace("Subscription selector: [" + selector + "]");
148151
}
@@ -185,6 +188,9 @@ protected MultiValueMap<String, String> findSubscriptionsInternal(String destina
185188
private MultiValueMap<String, String> filterSubscriptions(
186189
MultiValueMap<String, String> allMatches, Message<?> message) {
187190

191+
if (!this.selectorHeaderInUse) {
192+
return allMatches;
193+
}
188194
EvaluationContext context = null;
189195
MultiValueMap<String, String> result = new LinkedMultiValueMap<String, String>(allMatches.size());
190196
for (String sessionId : allMatches.keySet()) {

0 commit comments

Comments
 (0)