SEC-2179: Allow customize PathMatcher for SimpDestinationMessageMatcher
This commit is contained in:
+45
-20
@@ -19,40 +19,65 @@ import org.springframework.messaging.Message;
|
||||
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
|
||||
import org.springframework.util.AntPathMatcher;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.PathMatcher;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* MessageMatcher which compares a pre-defined ant-style pattern against the destination of a {@link Message}.
|
||||
* MessageMatcher which compares a pre-defined pattern against the destination of a {@link Message}.
|
||||
* </p>
|
||||
*
|
||||
* <p>The mapping matches destinations using the following rules:
|
||||
*
|
||||
* <ul>
|
||||
* <li>? matches one character</li>
|
||||
* <li>* matches zero or more characters</li>
|
||||
* <li>** matches zero or more 'directories' in a path</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>Some examples:
|
||||
*
|
||||
* <ul>
|
||||
* <li>{@code com/t?st.jsp} - matches {@code com/test} but also
|
||||
* {@code com/tast} or {@code com/txst}</li>
|
||||
* <li>{@code com/*suffix} - matches all files ending in {@code suffix} in the {@code com} directory</li>
|
||||
* <li>{@code com/**/test} - matches all destinations ending with {@code test} underneath the {@code com} path</li>
|
||||
* </ul>
|
||||
*
|
||||
* @since 4.0
|
||||
* @author Rob Winch
|
||||
*/
|
||||
public final class SimpDestinationMessageMatcher implements MessageMatcher<Object> {
|
||||
private final AntPathMatcher matcher = new AntPathMatcher();
|
||||
private final PathMatcher matcher;
|
||||
private final String pattern;
|
||||
|
||||
public SimpDestinationMessageMatcher(String pattern) {
|
||||
/**
|
||||
* <p>
|
||||
* Creates a new instance with the specified pattern and a {@link AntPathMatcher} created from the default
|
||||
* constructor.
|
||||
* </p>
|
||||
*
|
||||
* @param pattern the pattern to use
|
||||
* @param pathMatcher the {@link PathMatcher} to use.
|
||||
*/
|
||||
public SimpDestinationMessageMatcher(String pattern, PathMatcher pathMatcher) {
|
||||
Assert.notNull(pattern, "pattern cannot be null");
|
||||
Assert.notNull(pathMatcher, "pathMatcher cannot be null");
|
||||
this.matcher = pathMatcher;
|
||||
this.pattern = pattern;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Creates a new instance with the specified pattern and a {@link AntPathMatcher} created from the default
|
||||
* constructor.
|
||||
* </p>
|
||||
*
|
||||
* <p>The mapping matches destinations using the following rules:
|
||||
*
|
||||
* <ul>
|
||||
* <li>? matches one character</li>
|
||||
* <li>* matches zero or more characters</li>
|
||||
* <li>** matches zero or more 'directories' in a path</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>Some examples:
|
||||
*
|
||||
* <ul>
|
||||
* <li>{@code com/t?st.jsp} - matches {@code com/test} but also
|
||||
* {@code com/tast} or {@code com/txst}</li>
|
||||
* <li>{@code com/*suffix} - matches all files ending in {@code suffix} in the {@code com} directory</li>
|
||||
* <li>{@code com/**/test} - matches all destinations ending with {@code test} underneath the {@code com} path</li>
|
||||
* </ul>
|
||||
*
|
||||
* @param pattern the pattern to use
|
||||
*/
|
||||
public SimpDestinationMessageMatcher(String pattern) {
|
||||
this(pattern, new AntPathMatcher());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matches(Message<? extends Object> message) {
|
||||
String destination = SimpMessageHeaderAccessor.getDestination(message.getHeaders());
|
||||
|
||||
Reference in New Issue
Block a user