此版本仍在开发中,尚未被视为稳定版。如需最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

拦截器

您可以注册拦截器以应用于传入的请求,如下例所示:spring-doc.cadn.net.cn

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LocaleChangeInterceptor());
		registry.addInterceptor(new UserRoleAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
	}
}
@Configuration
class WebConfiguration : WebMvcConfigurer {

	override fun addInterceptors(registry: InterceptorRegistry) {
		registry.addInterceptor(LocaleChangeInterceptor())
		registry.addInterceptor(UserRoleAuthorizationInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**")
	}
}
<mvc:interceptors>
	<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
	<mvc:interceptor>
		<mvc:mapping path="/**"/>
		<mvc:exclude-mapping path="/admin/**"/>
		<bean class="org.springframework.web.servlet.handler.UserRoleAuthorizationInterceptor">
			<property name="authorizedRoles" value="ROLE_USER"/>
		</bean>
	</mvc:interceptor>
</mvc:interceptors>
由于拦截器可能与带注解的控制器路径匹配不一致,因此不适合作为安全层。通常,我们建议使用 Spring Security,或者采用类似的方法集成到 Servlet 过滤器链中,并尽可能早地应用。
XML 配置将拦截器声明为 MappedInterceptor Bean,这些 Bean 会被任意的 HandlerMapping Bean(包括来自其他框架的)自动检测到。 相比之下,Java 配置仅将其管理的拦截器传递给它所创建的 HandlerMapping Bean。 若要在使用 MVC Java 配置时,在 Spring MVC 和其他框架的 HandlerMapping Bean 之间复用相同的拦截器, 可以将拦截器声明为 MappedInterceptor Bean(并且不要在 Java 配置中手动添加它们), 或者在 Java 配置和其他 HandlerMapping Bean 中分别配置相同的拦截器。