Skip to content

Instantly share code, notes, and snippets.

@sandipchitale
Last active November 26, 2023 03:38
Show Gist options
  • Save sandipchitale/757c3646550fc698f412b4c2a2c07771 to your computer and use it in GitHub Desktop.
Save sandipchitale/757c3646550fc698f412b4c2a2c07771 to your computer and use it in GitHub Desktop.
Split Oauth2 Token Response #springboot #oauth2 #splittoken
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.ResponseEntity;
import org.springframework.security.oauth2.common.DefaultExpiringOAuth2RefreshToken;
import org.springframework.security.oauth2.common.DefaultOAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Configuration
@Aspect
public class OauthTokenInterceptorConfig {
@Around("execution(* org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(..))")
private Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
ResponseEntity<OAuth2AccessToken> oAuth2AccessTokenResponse = (ResponseEntity<OAuth2AccessToken>) proceedingJoinPoint
.proceed();
DefaultOAuth2AccessToken defaultOAuth2AccessToken = (DefaultOAuth2AccessToken) oAuth2AccessTokenResponse
.getBody();
HttpServletResponse httpServletResponse = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getResponse();
splitToken(defaultOAuth2AccessToken, httpServletResponse);
return oAuth2AccessTokenResponse;
}
private static void splitToken(DefaultOAuth2AccessToken defaultOAuth2AccessToken, HttpServletResponse httpServletResponse) {
String accessTokenValue = defaultOAuth2AccessToken.getValue();
String[] accessTokenParts = accessTokenValue.split("\\.");
defaultOAuth2AccessToken.setValue(accessTokenParts[1]);
Cookie accessTokenCookie = new Cookie("access_tooken_cookie", accessTokenParts[0] + "." + accessTokenParts[2]);
accessTokenCookie.setMaxAge(-1);
accessTokenCookie.setHttpOnly(true);
accessTokenCookie.setPath("/");
httpServletResponse.addCookie(accessTokenCookie);
DefaultExpiringOAuth2RefreshToken refreshToken = (DefaultExpiringOAuth2RefreshToken) defaultOAuth2AccessToken
.getRefreshToken();
String refreshTokenValue = refreshToken.getValue();
String[] refreshTokenParts = refreshTokenValue.split("\\.");
defaultOAuth2AccessToken.setRefreshToken(new DefaultExpiringOAuth2RefreshToken(refreshTokenParts[1], refreshToken.getExpiration()));
Cookie refreshTokenCookie = new Cookie("refresh_tooken_cookie", refreshTokenParts[0] + "." + refreshTokenParts[2]);
refreshTokenCookie.setMaxAge(-1);
refreshTokenCookie.setHttpOnly(true);
refreshTokenCookie.setPath("/");
httpServletResponse.addCookie(refreshTokenCookie);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment