У меня есть служба отдыха springboot и клиент Angular, я использовал JWT и Oauth2 для страницы входа в систему, когда я пробовал это на моем локальном хосте, работает отлично, но теперь, когда я пытаюсь развернуть файл war на сервере Tomcat, яне могу получить доступ к маршруту, который я хочу.Я установил маршрут 'cdns', который будет отображаться после входа в систему. Когда я открываю консоль Chrome, я вижу, что токен сгенерирован, но он не перенаправляет меня на страницу 'cdns', и даже если я пытаюсьперейдите по URL, он не позволит мне перейти на страницу входа в систему.Я сделал все это приложение после курса, и оно отлично сработало для парня курса с тем же кодом, так что idk что-то не так.
Это mi LoginService:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Router } from '@angular/router';
import { HOST, TOKEN_AUTH_USERNAME, TOKEN_AUTH_PASSWORD, TOKEN_NAME } from
'./../_shared/var.constants';
import * as decode from 'jwt-decode';
@Injectable()
export class LoginService {
private url: string = `${HOST}/oauth/token`;
constructor(private http: HttpClient, private router: Router) {
}
login(usuario: string, contrasena: string) {
const body =
`grant_type=password&username=${encodeURIComponent(usuario)}
&password=${encodeURIComponent(contrasena)}`;
return this.http.post(this.url, body, {
headers: new HttpHeaders().set('Content-Type', 'application/x-www-
form-urlencoded; charset=UTF-8').set('Authorization', 'Basic ' +
btoa(TOKEN_AUTH_USERNAME + ':' + TOKEN_AUTH_PASSWORD))
});
}
estaLogeado() {
let token = sessionStorage.getItem(TOKEN_NAME);
return token != null;
}
cerrarSesion() {
sessionStorage.clear();
this.router.navigate(['login']);
}
}
}
Этомой guardService:
import { LoginService } from './login.service';
import { TOKEN_NAME } from './../_shared/var.constants';
import { Injectable } from '@angular/core';
import { CanActivate, RouterStateSnapshot, ActivatedRouteSnapshot, Router
} from '@angular/router';
import { tokenNotExpired } from 'angular2-jwt';
@Injectable()
export class GuardService implements CanActivate {
constructor(private loginService: LoginService, private router: Router)
{ }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
let token = JSON.parse(sessionStorage.getItem(TOKEN_NAME));
if (token != null) {
let access_token = token.access_token;
let rpta = this.loginService.estaLogeado();
if (!rpta) {
sessionStorage.clear();
this.router.navigate(['login']);
return false;
} else {
if (tokenNotExpired(TOKEN_NAME, access_token)) {
return true;
} else {
sessionStorage.clear();
this.router.navigate(['login']);
return false;
}
}
} else {
sessionStorage.clear();
this.router.navigate(['login']);
return false;
}
}
}
И это мой компонент входа в систему:
import { Component, OnInit } from '@angular/core';
import { LoginService } from '../_service/login.service';
import { TOKEN_NAME } from '../_shared/var.constants';
import { Router } from '@angular/router';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
usuario: string;
contrasena: string;
error: string;
constructor(private loginService: LoginService, private router: Router)
{ }
ngOnInit() {
}
iniciarSesion() {
this.loginService.login(this.usuario, this.contrasena).subscribe(data
=> {
if (data) {
let token = JSON.stringify(data);
sessionStorage.setItem(TOKEN_NAME, token);
this.router.navigate(['cdns']);
}
}
, (err) => {
if (err.status !== 401) {
this.error = "Error de conexión";
}
if (err.status === 401 || err.status === 400) {
this.error = "Credenciales incorrectas";
}
});
}
cerrarSesion() {
sessionStorage.clear();
this.router.navigate(['login']);
}
}
Как я уже говорил ранее, это прекрасно работает, когда я запускаю его на локальном хосте, но не работает при развертываниина сервер.