xxxxxxxxxx
package com.javadevjournal.core.security.filter;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.filter.GenericFilterBean;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CustomHeaderAuthFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
var request = (HttpServletRequest) servletRequest;
var response = (HttpServletResponse) servletResponse;
//if header is missing , send un-athorized error back
String authHeader = request.getHeader("X-HEADER");
if (StringUtils.isEmpty(authHeader)) {
response.setStatus(
HttpServletResponse.SC_UNAUTHORIZED);
} else {
filterChain.doFilter(servletRequest, servletResponse);
}
}
}
xxxxxxxxxx
You can implement a custom filter in Spring security by implementing the org.springframework.web.filter.GenericFilterBean class.
The GenericFilterBean is a simple javax.servlet.Filter implementation which is Spring aware.
You can override doFilter(ServletRequest req, ServletResponse res, FilterChain chain) to implement your own logic.
Read more: https://javarevisited.blogspot.com/2021/02/spring-security-interview-questions-answers-java.html#ixzz7oQ6xmtMu
xxxxxxxxxx
@Configuration
public class AppSecurityConfigurerAdapter
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterAfter(
customAuthFilter(), BasicAuthenticationFilter.class);
}
}
@Bean
public CustomHeaderAuthFilter customAuthFilter(){
return new CustomHeaderAuthFilter();
}