· 8 years ago · Sep 01, 2017, 08:54 PM
1login(formGroup: FormGroup): Observable<boolean> {
2 const headers = new Headers();
3 headers.append('Authorization', 'Basic xxxxxxxxxxxx')
4 headers.append('Content-Type', 'application/x-www-form-urlencoded');
5 let user = formGroup.get('username').value;
6 let password = formGroup.get('password').value;
7 const body = 'username=' + user + '&password=' + password + '&grant_type=password';
8 return this.http.post(URIConstantes.LOGIN, body, {headers: headers})
9 .map((response: Response) => {
10 let token = response.json()['access_token'];
11 if (token != null) {
12 this.token = token;
13 this.saveTokenToLocalStorage(token);
14 return true;
15 } else {
16 // return false to indicate failed login
17 return false;
18 }
19 });
20 }
21
22obterNovoAccessToken(): Observable<any> {
23 const headers = new Headers();
24 headers.append('Content-Type', 'application/x-www-form-urlencoded')
25 headers.append('Authorization', 'Basic YW5ndWxhcjpAbmd1bEByMA==')
26
27 const body = 'grant_type=refresh_token';
28 return this.http.post(URIConstantes.LOGIN, body, { headers, withCredentials: true })
29 .map(response => {
30 console.log(response);
31 this.armazenarToken(response.json()['access_token']);
32 console.log('Novo access token criado!');
33 }).catch(
34 response => {
35 console.error('Erro ao renovar token.', response.json());
36 return Promise.resolve(null);
37 });
38 }
39
40@ControllerAdvice
41public class RefreshTokenPostProcessor implements ResponseBodyAdvice<OAuth2AccessToken> {
42
43 @Override
44 public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
45 return returnType.getMethod().getName().equals("postAccessToken");
46 }
47
48 @Override
49 public OAuth2AccessToken beforeBodyWrite(OAuth2AccessToken body, MethodParameter returnType,
50 MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType,
51 ServerHttpRequest request, ServerHttpResponse response) {
52
53 HttpServletRequest req = ((ServletServerHttpRequest) request).getServletRequest();
54 HttpServletResponse resp = ((ServletServerHttpResponse) response).getServletResponse();
55
56 DefaultOAuth2AccessToken token = (DefaultOAuth2AccessToken) body;
57
58 String refreshToken = body.getRefreshToken().getValue();
59 adicionarRefreshTokenNoCookie(refreshToken, req, resp);
60 removerRefreshTokenDoBody(token);
61
62 return body;
63 }
64
65 private void removerRefreshTokenDoBody(DefaultOAuth2AccessToken token) {
66 token.setRefreshToken(null);
67 }
68
69 //add token on cookie response
70 private void adicionarRefreshTokenNoCookie(String refreshToken, HttpServletRequest req, HttpServletResponse resp) {
71 Cookie refreshTokenCookie = new Cookie("refreshToken", refreshToken);
72 refreshTokenCookie.setHttpOnly(true);
73 refreshTokenCookie.setSecure(false);
74 refreshTokenCookie.setPath(req.getContextPath() + "/oauth/token");
75 refreshTokenCookie.setMaxAge(2592000);
76 resp.addCookie(refreshTokenCookie);
77 }
78
79}