All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.servlet.handler.MappedInterceptor Maven / Gradle / Ivy

/*
 * Copyright 2002-2018 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.servlet.handler;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.lang.Nullable;
import org.springframework.util.ObjectUtils;
import org.springframework.util.PathMatcher;
import org.springframework.web.context.request.WebRequestInterceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

/**
 * Contains and delegates calls to a {@link HandlerInterceptor} along with
 * include (and optionally exclude) path patterns to which the interceptor should apply.
 * Also provides matching logic to test if the interceptor applies to a given request path.
 *
 * 

A MappedInterceptor can be registered directly with any * {@link org.springframework.web.servlet.handler.AbstractHandlerMethodMapping}. * Furthermore, beans of type {@code MappedInterceptor} are automatically detected by * {@code AbstractHandlerMethodMapping} (including ancestor ApplicationContext's) which * effectively means the interceptor is registered "globally" with all handler mappings. * * @author Keith Donald * @author Rossen Stoyanchev * @author Brian Clozel * @since 3.0 */ public final class MappedInterceptor implements HandlerInterceptor { @Nullable private final String[] includePatterns; @Nullable private final String[] excludePatterns; private final HandlerInterceptor interceptor; @Nullable private PathMatcher pathMatcher; /** * Create a new MappedInterceptor instance. * @param includePatterns the path patterns to map (empty for matching to all paths) * @param interceptor the HandlerInterceptor instance to map to the given patterns */ public MappedInterceptor(@Nullable String[] includePatterns, HandlerInterceptor interceptor) { this(includePatterns, null, interceptor); } /** * Create a new MappedInterceptor instance. * @param includePatterns the path patterns to map (empty for matching to all paths) * @param excludePatterns the path patterns to exclude (empty for no specific excludes) * @param interceptor the HandlerInterceptor instance to map to the given patterns */ public MappedInterceptor(@Nullable String[] includePatterns, @Nullable String[] excludePatterns, HandlerInterceptor interceptor) { this.includePatterns = includePatterns; this.excludePatterns = excludePatterns; this.interceptor = interceptor; } /** * Create a new MappedInterceptor instance. * @param includePatterns the path patterns to map (empty for matching to all paths) * @param interceptor the WebRequestInterceptor instance to map to the given patterns */ public MappedInterceptor(@Nullable String[] includePatterns, WebRequestInterceptor interceptor) { this(includePatterns, null, interceptor); } /** * Create a new MappedInterceptor instance. * @param includePatterns the path patterns to map (empty for matching to all paths) * @param excludePatterns the path patterns to exclude (empty for no specific excludes) * @param interceptor the WebRequestInterceptor instance to map to the given patterns */ public MappedInterceptor(@Nullable String[] includePatterns, @Nullable String[] excludePatterns, WebRequestInterceptor interceptor) { this(includePatterns, excludePatterns, new WebRequestHandlerInterceptorAdapter(interceptor)); } /** * Configure a PathMatcher to use with this MappedInterceptor instead of the one passed * by default to the {@link #matches(String, org.springframework.util.PathMatcher)} method. *

This is an advanced property that is only required when using custom PathMatcher * implementations that support mapping metadata other than the Ant-style path patterns * supported by default. */ public void setPathMatcher(@Nullable PathMatcher pathMatcher) { this.pathMatcher = pathMatcher; } /** * The configured PathMatcher, or {@code null} if none. */ @Nullable public PathMatcher getPathMatcher() { return this.pathMatcher; } /** * The path into the application the interceptor is mapped to. */ @Nullable public String[] getPathPatterns() { return this.includePatterns; } /** * The actual {@link HandlerInterceptor} reference. */ public HandlerInterceptor getInterceptor() { return this.interceptor; } /** * Determine a match for the given lookup path. * @param lookupPath the current request path * @param pathMatcher a path matcher for path pattern matching * @return {@code true} if the interceptor applies to the given request path */ public boolean matches(String lookupPath, PathMatcher pathMatcher) { PathMatcher pathMatcherToUse = (this.pathMatcher != null ? this.pathMatcher : pathMatcher); if (!ObjectUtils.isEmpty(this.excludePatterns)) { for (String pattern : this.excludePatterns) { if (pathMatcherToUse.match(pattern, lookupPath)) { return false; } } } if (ObjectUtils.isEmpty(this.includePatterns)) { return true; } for (String pattern : this.includePatterns) { if (pathMatcherToUse.match(pattern, lookupPath)) { return true; } } return false; } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return this.interceptor.preHandle(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { this.interceptor.postHandle(request, response, handler, modelAndView); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { this.interceptor.afterCompletion(request, response, handler, ex); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy