Spring Boot에서 서블릿필터를 등록하지 않도록 합니다.
Spring Boot WebMVC 어플리케이션과 Abstract Pre에서 상속받은 빈을 가지고 있습니다.스프링 보안 필터 체인의 특정 지점에 명시적으로 추가하는 Authenticated Processing Filter.스프링 보안 설정은 다음과 같습니다.
<http pattern="/rest/**">
<intercept-url pattern="/**" access="ROLE_USER"/>
<http-basic/>
<custom-filter after="BASIC_AUTH_FILTER" ref="preAuthenticationFilter"/>
</http>
<beans:bean id="preAuthenticationFilter" class="a.b.PreAuthenticationFilter">
<beans:property name="authenticationManager" ref="customAuthenticationManager"/>
</beans:bean>
시큐러티 설정은 기능합니다.문제는 PreAuthenticationFilter 클래스가 AbstractPre에서 상속되기 때문입니다.Authenticated Processing Filter, Spring Boot에서는 범용 서블릿필터로 취급되어 모든 요구에 대해 서블릿필터 체인에 추가합니다.이 필터를 모든 요청에 대한 필터 체인에 포함시키지 마십시오.설정한 특정 Spring Security 필터 체인의 일부만 사용할 수 있습니다.Spring Boot에서 필터 체인에 preAuthenticationFilter bean이 자동으로 추가되지 않도록 하는 방법이 있습니까?
기본적으로는 Spring Boot은FilterRegistrationBean
모든 것에 대해서Filter
응용 프로그램 컨텍스트에서FilterRegistrationBean
이미 존재하지 않습니다.이것에 의해, 자신의 등록 프로세스를 선언하는 것으로, 등록의 무효화를 포함한 등록 프로세스를 제어할 수 있습니다.FilterRegistrationBean
를 위해Filter
고객님의PreAuthenticationFilter
필요한 설정은 다음과 같습니다.
@Bean
public FilterRegistrationBean registration(PreAuthenticationFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
또, 이 Spring Boot 의 문제에 대해서도 관심이 있을 가능성이 있습니다.이 문제에 대해서는, 다음의 자동 등록을 무효로 하는 방법에 대해 설명합니다.Filter
그리고.Servlet
콩류.
한 번에 모든 필터를 등록 취소하려면 다음과 같이 하십시오.
public class DefaultFiltersBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory bf)
throws BeansException {
DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) bf;
Arrays.stream(beanFactory.getBeanNamesForType(javax.servlet.Filter.class))
.forEach(name -> {
BeanDefinition definition = BeanDefinitionBuilder
.genericBeanDefinition(FilterRegistrationBean.class)
.setScope(BeanDefinition.SCOPE_SINGLETON)
.addConstructorArgReference(name)
.addConstructorArgValue(new ServletRegistrationBean[]{})
.addPropertyValue("enabled", false)
.getBeanDefinition();
beanFactory.registerBeanDefinition(name + "FilterRegistrationBean",
definition);
});
}
}
이 기술에 대해 좀 더 자세히 설명하겠습니다.
(i와 같이) 2개의 필터 등록을 디세블로 할 필요가 있는 경우는, bean 의 이름을 입력합니다(이러한 필터가 덮어쓰지 않도록 합니다).
@Bean(name = "filterRegistrationBean1")
public FilterRegistrationBean<YourFilter1> registration(YourFilter1 f1) {
FilterRegistrationBean<YourFilter1> registration = new FilterRegistrationBean<>(f1);
registration.setEnabled(false);
return registration;
}
@Bean(name = "filterRegistrationBean2")
public FilterRegistrationBean<YourFilter2> registration(YourFilter2 f2) {
FilterRegistrationBean<YourFilter2> registration = new FilterRegistrationBean<>(f2);
registration.setEnabled(false);
return registration;
}
나는 그것을 하기 위해 aop을 사용하고, 당신의 필터를 삽입하기 위해 주변 포인트 컷을 사용합니다, manully invode.
filterChain.doFilter(request, response)
@Aspect
@Component
public class AspectDemo {
@Around(value = "com.xxx.pointcut01()")
public void around01(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("[Aspect-around01] start");
ServletRequest request = (ServletRequest)Arrays.asList(
((MethodInvocationProceedingJoinPoint) joinPoint).getArgs()
).get(0);
ServletResponse response = (ServletResponse)Arrays.asList(
((MethodInvocationProceedingJoinPoint) joinPoint).getArgs()
).get(1);
FilterChain filterChain = (FilterChain)Arrays.asList(
((MethodInvocationProceedingJoinPoint) joinPoint).getArgs()
).get(2);
filterChain.doFilter(request, response);
//do not execute origin doFilter() method
//joinPoint.proceed();
System.out.println("[Aspect-around01] end");
}
}
언급URL : https://stackoverflow.com/questions/28421966/prevent-spring-boot-from-registering-a-servlet-filter
'programing' 카테고리의 다른 글
Spring Boot + REST 응용 프로그램에서 "No message available" (메시지가 없습니다) 오류가 나타난다. (0) | 2023.03.27 |
---|---|
react-router의 URL에서 해시를 제거하는 방법 (0) | 2023.03.27 |
Oracle 테이블에서 열 이름을 가져오려면 어떻게 해야 합니까? (0) | 2023.03.27 |
JQ json 값에서 줄바꿈 문자가 아닌 줄바꿈 문자를 인쇄하는 방법 (0) | 2023.03.27 |
왜 JSX 소품은 화살표 기능이나 바인드를 사용하면 안 되는가? (0) | 2023.03.27 |