Skip to content

Instantly share code, notes, and snippets.

@vdelacou
Created June 7, 2018 07:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vdelacou/153ee65c56c9c65bd32df26195a53e40 to your computer and use it in GitHub Desktop.
Save vdelacou/153ee65c56c9c65bd32df26195a53e40 to your computer and use it in GitHub Desktop.
Change JWT Filter with optional Authentication
package com.seelix.api.security.jwt;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.GenericFilterBean;
/**
* Filters incoming requests and installs a Spring Security principal if a
* header corresponding to a valid user is found.
*/
public class JWTFilter extends GenericFilterBean {
private TokenProvider tokenProvider;
public JWTFilter(TokenProvider tokenProvider) {
this.tokenProvider = tokenProvider;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String jwt = resolveToken(httpServletRequest);
if (StringUtils.hasText(jwt)) {
this.tokenProvider.getAuthentication(jwt)
.ifPresent(authentication -> SecurityContextHolder.getContext().setAuthentication(authentication));
}
filterChain.doFilter(servletRequest, servletResponse);
}
private String resolveToken(HttpServletRequest request) {
String bearerToken = request.getHeader(JWTConfigurer.AUTHORIZATION_HEADER);
if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7, bearerToken.length());
}
return null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment