【发布时间】:2020-02-10 21:24:37
【问题描述】:
对于后端,我使用带有“Shiro”的 Spring Framework 进行身份验证,
对于前端,我使用的是 Angular 5。
如果我从邮递员那里调用我的登录 API,那么在我使用注销 API 之前,我将获得相同的用户会话。 (哪个是正确的)
但是当我从我的 Angular 5 调用我的登录 API 时,每次调用都会得到不同的用户会话。 (这是错误的。)
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/toPromise';
@Injectable()
export class LoginService {
private headers = new Headers({'Content-Type': 'application/x-www-form-urlencoded'});
private _url:string = "v1/login";
constructor(private http: HttpClient) { }
login(){
const data = {userName:"root", password:"root"};
return this.http.post(this._url,{headers: this.headers},{params : data})
.subscribe(data => {sessionStorage.setItem("jsessionid",JSON.parse(JSON.stringify(data)).jsessionid)});
}
}
在每次调用时,'jsessionid' 都会发生变化,如 '' 所示
【问题讨论】:
-
您是否在连续调用时将旧的
jsessionid值发回? -
我们从 Shiro 获得了 'jsessionid',所以如果我们从同一个用户会话中调用登录 API,那么我们将得到相同的 'jsessionid'。在这里,当我从角度调用我的登录 API 时,每次调用都会创建新会话。所以每次'jsessionid'都在变化。
-
jsessionid值用于标识服务器端的会话。客户端必须在每次调用时将其发回,否则将创建一个新会话。 -
是的。但我不知道如何在客户端每次调用时发送
jsessionid(来自 angular 5 )。 -
我不认识 Shiro,但通常这是作为 cookie 完成的。
标签: angular