CORS Filter → CSRF Filter → BasicAuthentication Filter
package com.chan.ssb.filter;
import jakarta.servlet.*;
import java.io.IOException;
import java.util.logging.Logger;
public class CustomFilter1 implements Filter {
private final Logger LOG =
Logger.getLogger(CustomFilter1.class.getName());
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
LOG.info("Authentication Validation is in progress");
filterChain.doFilter(servletRequest, servletResponse);
}
}
package com.chan.ssb.filter;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CustomFilter2 implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse res = (HttpServletResponse) servletResponse;
String username = req.getParameter("username");
if(username.equals("test")){
res.sendError(HttpServletResponse.SC_BAD_REQUEST, "test");
return;
}
filterChain.doFilter(servletRequest, servletResponse);
}
}
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf((csrf)-> csrf.csrfTokenRequestHandler(requestHandler).ignoringRequestMatchers("/user/**", "/authority", "/h2-console/**")
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()))
.addFilterAfter(new CsrfCookieFilter(), BasicAuthenticationFilter.class)
.addFilterBefore(new CustomFilter2(), BasicAuthenticationFilter.class)
// .addFilterAfter(new CustomFilter1(), BasicAuthenticationFilter.class)
.addFilterAt(new CustomFilter1(), BasicAuthenticationFilter.class);
return http.build();
}