Interceptors

Dev.Hammy·2024년 4월 8일
0

Java 구성에서는 다음 예제와 같이 들어오는 요청에 적용할 인터셉터를 등록할 수 있습니다.

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LocaleChangeInterceptor());
		registry.addInterceptor(new ThemeChangeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");
	}
}

다음 예에서는 XML에서 동일한 구성을 달성하는 방법을 보여줍니다.

<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.theme.ThemeChangeInterceptor"/>
	</mvc:interceptor>
</mvc:interceptors>

[Note]
인터셉터는 annotation이 달린 컨트롤러 경로 일치와의 불일치 가능성으로 인해 보안 계층으로 이상적으로 적합하지 않습니다. 이는 다른 path matching 옵션과 함께 후행 슬래시 및 경로 확장을 투명하게 일치시킬 수도 있습니다. 이러한 옵션 중 다수는 더 이상 사용되지 않지만 불일치 가능성은 여전히 남아 있습니다. 일반적으로 Spring MVC 경로 일치에 맞춰 전용 MvcRequestMatcher를 포함하고 URL 경로에서 원하지 않는 많은 문자를 차단하는 보안 방화벽이 포함된 Spring Security를 사용하는 것이 좋습니다.

[Note]
XML 구성은 인터셉터를 MappedInterceptor 빈으로 선언하고 이는 다른 프레임워크의 빈을 포함하여 모든 HandlerMapping 빈에 의해 감지됩니다. 대조적으로, Java 구성은 관리하는 HandlerMapping Bean에만 인터셉터를 전달합니다. MVC Java 구성과 함께 Spring MVC 및 기타 프레임워크 HandlerMapping Bean에서 동일한 인터셉터를 재사용하려면 MappedInterceptor Bean을 선언하거나(Java 구성에 수동으로 추가하지 않음) Java 구성과 다른 HandlerMapping 빈 모두에서 동일한 인터셉터를 구성하십시오.

0개의 댓글