Skip to content

Instantly share code, notes, and snippets.

@adatta02
Created June 20, 2020 23:29
package com.setfive.demo.apiheaderdemo.filter;
import com.setfive.demo.apiheaderdemo.entity.ApiKey;
import com.setfive.demo.apiheaderdemo.repository.ApiKeyRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
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;
import java.util.Optional;
@Component
public class ApiKeyRequestFilter extends GenericFilterBean {
private static final Logger LOG = LoggerFactory.getLogger(ApiKeyRequestFilter.class);
private ApiKeyRepository apiKeyRepository;
public ApiKeyRequestFilter(ApiKeyRepository apiKeyRepository){
this.apiKeyRepository = apiKeyRepository;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
String path = req.getRequestURI();
if(path.startsWith("/api") == false){
chain.doFilter(request, response);
return;
}
String key = req.getHeader("Key") == null ? "" : req.getHeader("Key");
LOG.info("Trying key: " + key);
Optional<ApiKey> apiKeyOptional = this.apiKeyRepository.findOneByKey(key);
if(apiKeyOptional.isPresent()){
chain.doFilter(request, response);
}else{
HttpServletResponse resp = (HttpServletResponse) response;
String error = "Invalid API KEY";
resp.reset();
resp.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentLength(error .length());
response.getWriter().write(error);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment