Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.pepaproch.gtswsdlclient.auth; import com.pepaproch.gtswsdlclient.model.gts.AuthRequest; import com.pepaproch.gtswsdlclient.model.gts.AuthResponse; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; import java.util.ArrayList; import java.util.List; /** * * @author pepa Class responsible for retriving and caching auth token for gts * web service */ public class AuthTokenProviderImpl implements AuthTokenProvider, AuthTokenRevokedListener { public static final String AUTH_PATH = "/v1/auth"; private final String baseUrl; private final RestTemplate restTemplate; private final AuthRequest authorisation; private final Integer validSeconds; private volatile AuthToken authToken; /** * * @param baseUrl * @param user * @param password * @param restTemplate * @param validSeconds */ public AuthTokenProviderImpl(String baseUrl, String user, String password, RestTemplate restTemplate, Integer validSeconds) { this.baseUrl = baseUrl; this.restTemplate = restTemplate; List<HttpMessageConverter<?>> list = new ArrayList<>(); list.add(new MappingJackson2HttpMessageConverter()); restTemplate.setMessageConverters(list); authorisation = new AuthRequest(user, password); authToken = new AuthToken(); this.validSeconds = validSeconds; } private AuthResponse getAuthResponse() { System.out.println("POST FOR OBJECT:"); return restTemplate.postForObject(baseUrl + AUTH_PATH, authorisation, AuthResponse.class); } @Override public AuthToken getAuthorisationToken() { if (!this.authToken.isValid()) { System.out.println("TOKEN: " + this.authToken.getToken() + " RENEWING TOKEN"); renewToken(); } return this.authToken; } private void renewToken() { AuthResponse response = getAuthResponse(); AuthToken newToken = new AuthToken(response.getAccessToken(), validSeconds); this.authToken = newToken; System.out.println("NEW TOKEN: " + this.authToken.getToken()); } @Override public synchronized void revoked(AuthToken authToken) { if (this.authToken.getToken().equals(authToken.getToken())) { this.authToken.setRevoked(Boolean.TRUE); } } }