javaspring-boot

Filter not called


I am trying to learn with Spring Boot and I am now at the filters.

I have defined the following filter which is not called. I tested it first with debug and a breakpoint and then with hard debug (println and output).

Do I still need to register the filter or have I forgotten something?

package com.example.demo.filter;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import java.io.IOException;

@Component
public class CustumRequestFilter implements Filter
{
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;

        // System.out.println("Hello Filter");

        ((HttpServletResponse) request).setHeader("X-TEST-REQUEST", "FOOBAR-REQUEST");
        ((HttpServletResponse) response).setHeader("X-TEST-RESPONSE", "FOOBAR-RESPONSE");

        // response.getOutputStream().write("Puff paff".getBytes());

        chain.doFilter(request, response);
    }
}

Solution

  • Use FilterRegistrationBean.

    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import com.example.demo.filter.CustumRequestFilter;
    
    @Configuration
    public class FilterConfiguration {
    
        @Bean
        public FilterRegistrationBean<CustumRequestFilter> filter() {
            FilterRegistrationBean<CustumRequestFilter> registrationBean = new FilterRegistrationBean<>();
            registrationBean.setFilter(new CustumRequestFilter());
            registrationBean.addUrlPatterns("/*");
    
            return registrationBean;
        }
    }