Skip to content

Commit 0fbe714

Browse files
committed
Merge branch '7.0.x'
2 parents 9c64be9 + 167afd9 commit 0fbe714

17 files changed

Lines changed: 189 additions & 171 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry {
7474

7575
/** Static evaluation context to reuse. */
7676
private static final EvaluationContext messageEvalContext =
77-
SimpleEvaluationContext.forPropertyAccessors(new SimpMessageHeaderPropertyAccessor()).build();
77+
SimpleEvaluationContext.forPropertyAccessors(new SimpMessageHeaderPropertyAccessor())
78+
.withAssignmentDisabled().build();
7879

7980

8081
private PathMatcher pathMatcher = new AntPathMatcher();

spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ protected void startInternal() {
456456
accessor.setLogin(this.systemLogin);
457457
accessor.setPasscode(this.systemPasscode);
458458
accessor.setHeartbeat(this.systemHeartbeatSendInterval, this.systemHeartbeatReceiveInterval);
459-
accessor.setHost(getVirtualHost() != null ? getVirtualHost() : getRelayHost());
459+
accessor.setHost(getVirtualHost() != null ? getVirtualHost() : null);
460460
accessor.setSessionId(SYSTEM_SESSION_ID);
461461
if (logger.isDebugEnabled()) {
462462
logger.debug("Forwarding " + accessor.getShortLogMessage(EMPTY_PAYLOAD));
@@ -579,7 +579,7 @@ else if (accessor instanceof SimpMessageHeaderAccessor) {
579579
stompHeaderAccessor = (stompHeaderAccessor.isMutable() ? stompHeaderAccessor : StompHeaderAccessor.wrap(message));
580580
stompHeaderAccessor.setLogin(this.clientLogin);
581581
stompHeaderAccessor.setPasscode(this.clientPasscode);
582-
stompHeaderAccessor.setHost(getVirtualHost() != null ? getVirtualHost() : getRelayHost());
582+
stompHeaderAccessor.setHost(getVirtualHost() != null ? getVirtualHost() : null);
583583
RelayConnectionHandler handler = new RelayConnectionHandler(sessionId, stompHeaderAccessor);
584584
this.connectionHandlers.put(sessionId, handler);
585585
this.stats.incrementConnectCount();

spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandlerTests.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,27 @@ void virtualHost() {
9898
assertThat(headers2.getHost()).isEqualTo("ABC");
9999
}
100100

101+
@Test
102+
void virtualHostDefault() {
103+
Message<byte[]> connectMessage = connectMessage("sess1", "joe");
104+
MessageHeaderAccessor.getAccessor(connectMessage, StompHeaderAccessor.class).setHost("ABC");
105+
106+
this.brokerRelay.start();
107+
this.brokerRelay.handleMessage(connectMessage("sess1", "joe"));
108+
109+
assertThat(this.tcpClient.getSentMessages()).hasSize(2);
110+
111+
StompHeaderAccessor headers1 = this.tcpClient.getSentHeaders(0);
112+
assertThat(headers1.getCommand()).isEqualTo(StompCommand.CONNECT);
113+
assertThat(headers1.getSessionId()).isEqualTo(StompBrokerRelayMessageHandler.SYSTEM_SESSION_ID);
114+
assertThat(headers1.getHost()).isNull();
115+
116+
StompHeaderAccessor headers2 = this.tcpClient.getSentHeaders(1);
117+
assertThat(headers2.getCommand()).isEqualTo(StompCommand.CONNECT);
118+
assertThat(headers2.getSessionId()).isEqualTo("sess1");
119+
assertThat(headers2.getHost()).isNull();
120+
}
121+
101122
@Test
102123
void loginAndPasscode() {
103124
this.brokerRelay.setSystemLogin("syslogin");

spring-web/src/main/java/org/springframework/http/server/reactive/ReactorUriHelper.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,19 +135,25 @@ private static void appendRequestUri(HttpServerRequest request, StringBuilder bu
135135
if (c == '/' || c == '?' || c == '#') {
136136
break;
137137
}
138-
if (c == ':' && (i + 2 < length)) {
139-
if (uri.charAt(i + 1) == '/' && uri.charAt(i + 2) == '/') {
140-
for (int j = i + 3; j < length; j++) {
141-
c = uri.charAt(j);
142-
if (c == '/' || c == '?' || c == '#') {
143-
builder.append(uri, j, length);
144-
return;
145-
}
138+
if (hasAuthority(uri, c, i, length)) {
139+
for (i = i + 3; i < length; i++) {
140+
c = uri.charAt(i);
141+
if (c == '/' || c == '?' || c == '#') {
142+
builder.append(uri, i, length);
143+
return;
146144
}
147-
return;
148145
}
146+
return;
149147
}
150148
}
149+
if (length > 0 && uri.charAt(0) != '/') {
150+
builder.append('/');
151+
}
151152
builder.append(uri);
152153
}
154+
155+
private static boolean hasAuthority(String uri, char c, int i, int length) {
156+
return (c == ':' && (i + 2 < length) && (uri.charAt(i + 1) == '/' && uri.charAt(i + 2) == '/'));
157+
}
158+
153159
}

spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,9 +148,11 @@ protected void handleMatch(String key, MediaType mediaType) {
148148
throws HttpMediaTypeNotAcceptableException {
149149

150150
if (!isUseRegisteredExtensionsOnly()) {
151-
Optional<MediaType> mediaType = MediaTypeFactory.getMediaType("file." + key);
152-
if (mediaType.isPresent()) {
153-
return mediaType.get();
151+
if (key.indexOf('.') == -1) {
152+
Optional<MediaType> mediaType = MediaTypeFactory.getMediaType("file." + key);
153+
if (mediaType.isPresent()) {
154+
return mediaType.get();
155+
}
154156
}
155157
}
156158
if (isIgnoreUnknownExtensions()) {

spring-web/src/main/java/org/springframework/web/accept/MappingMediaTypeFileExtensionResolver.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,7 @@ public class MappingMediaTypeFileExtensionResolver implements MediaTypeFileExten
5757
public MappingMediaTypeFileExtensionResolver(@Nullable Map<String, MediaType> mediaTypes) {
5858
if (mediaTypes != null) {
5959
Set<String> allFileExtensions = CollectionUtils.newHashSet(mediaTypes.size());
60-
mediaTypes.forEach((extension, mediaType) -> {
61-
String lowerCaseExtension = extension.toLowerCase(Locale.ROOT);
62-
this.mediaTypes.put(lowerCaseExtension, mediaType);
63-
addFileExtension(mediaType, lowerCaseExtension);
64-
allFileExtensions.add(lowerCaseExtension);
65-
});
60+
mediaTypes.forEach(this::addMapping);
6661
this.allFileExtensions.addAll(allFileExtensions);
6762
}
6863
}
@@ -79,19 +74,15 @@ protected List<MediaType> getAllMediaTypes() {
7974
/**
8075
* Map an extension to a MediaType. Ignore if extension already mapped.
8176
*/
82-
protected void addMapping(String extension, MediaType mediaType) {
83-
MediaType previous = this.mediaTypes.putIfAbsent(extension, mediaType);
77+
protected void addMapping(String key, MediaType mediaType) {
78+
key = key.toLowerCase(Locale.ROOT);
79+
MediaType previous = this.mediaTypes.putIfAbsent(key, mediaType);
8480
if (previous == null) {
85-
addFileExtension(mediaType, extension);
86-
this.allFileExtensions.add(extension);
81+
this.fileExtensions.computeIfAbsent(mediaType, k -> new CopyOnWriteArrayList<>()).add(key);
82+
this.allFileExtensions.add(key);
8783
}
8884
}
8985

90-
private void addFileExtension(MediaType mediaType, String extension) {
91-
this.fileExtensions.computeIfAbsent(mediaType, key -> new CopyOnWriteArrayList<>())
92-
.add(extension);
93-
}
94-
9586

9687
@Override
9788
public List<String> resolveFileExtensions(MediaType mediaType) {

0 commit comments

Comments
 (0)