Я расширяя WebSecurityConfigurerAdapter переопределении метода Configure. Моя цель состоит в том, чтобы поставить фильтр по конкретному URL, который обойти страницу входа в систему и сделать ручную проверку подлинности. Для этого мне нужен фильтр, чтобы быть выполнен только первый раз, когда пользователь попытается достичь SECTION_WITH_FILTER URL. Вот мой код:Spring пользовательских фильтров выполнить только один раз на указанный URL
@Autowired
MyFilter myFilter;
@Override
protected void configure(HttpSecurity http) throws Exception {
logger.debug("<CONFIGURE HTTPSECURITY/>");
http
.authorizeRequests()
.antMatchers("/login*.*", "/error.*", "/resources/**", "/javax**/**").permitAll()
.antMatchers("/SECTION_WITH_FILTER/**").permitAll()
.antMatchers("/", "/*.jsf", "/**/*.jsf", "/*.faces", "/**/*.faces").hasAnyRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login.jsf")
.permitAll()
.and()
.logout()
.invalidateHttpSession(false)
.logoutSuccessUrl("/")
.deleteCookies("JSESSIONID")
.permitAll()
.and().csrf().disable();
http
.addFilterBefore(myFilter, BasicAuthenticationFilter.class);
}
Моя проблема заключается в том, что фильтр начинает после того, как каждый представить в какой-либо форме веб-сайта.
Я уже пытался с FilterRegistrationBean используется также для установки фильтра только тогда, когда пользователь переходит к определенному URL:
@Bean
public FilterRegistrationBean filterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(myFilter);
registration.addUrlPatterns("/SECTION_WITH_FILTER/**");
registration.setName("myFilter");
registration.setEnabled(true);
return registration;
}
Но используя этот метод исключение StackOverflowError брошено.
org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root cause
java.lang.StackOverflowError
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:231)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:589)
...
Как я могу изменить свой код, чтобы сделать фильтр, указанным для одного URL, который начинается только первый раз, когда пользователь пытается достичь? Благодаря