Я бы хотел создать административный портал для управления книгами (получить, добавить, удалить, обновить книгу).Итак, я начал с функции входа / выхода;часть входа работает как талисман, но у меня проблема с выходом из системы.Когда я выхожу из системы, портал администратора поддерживает сессию и не убивает ее, и я не могу получить ни одной ошибки в журнале, которая доказывает мне эту проблему.
Ниже приведен фрагмент кода, который отвечает на пост-запрос на выход из системы:
@RequestMapping(value = "/user/logout", method = RequestMethod.POST)
public ResponseEntity logout(HttpServletRequest request, HttpServletResponse response) {
SecurityContextHolder.clearContext();
return new ResponseEntity("Logout Successful !", HttpStatus.OK);
}
В клиенте я использую Angular для отправки запроса на мой локальный сервер. Ниже сервис выхода:
logout(){
let url="http://localhost:8090/user/logout";
const xToken = localStorage.getItem('xAuthToken');
let headers=new Headers({
'x-auth-token':xToken,
});
return this.http.post(url,{headers:headers});
}
Переменная xToken getтокен сеанса из локального хранилища браузера.
Каждый раз, когда мы проверяем, поддерживается ли сеанс в ngOnInit компонента входа:
ngOnInit() {
this.login.checkSession().subscribe(
res=>{
this.loggedIn=true;
},
err=>{
console.log(err);
this.loggedIn=false;
}
)
}
Служба, которая являетсяответственность за проверку сеанса подробно описана ниже:
checkSession(){
let url="http://localhost:8090/checkSession";
const xToken = localStorage.getItem('xAuthToken');
const basicHeader = 'Basic ' + localStorage.getItem('credentials');
let headers=new Headers({
'x-auth-token':xToken,
'Authorization':basicHeader
});
return this.http.get(url,{headers:headers});
}
Для проверки сеанса мы запрашиваем сервер:
@RequestMapping("/checkSession")
public ResponseEntity checkSession() {
System.out.print("Session Active !");
return new ResponseEntity("Session Active !", HttpStatus.OK);
}
basicHeader константа - это схема аутентификации, которая содержиткодированная комбинация имени пользователя и пароля, хранящаяся в локальном хранилище браузера.
для получения дополнительной информации ниже о том, как мы отправляем учетные данные на сервер:
onSubmit(){
this.login.sendCredentials(this.credentials.username,this.credentials.password).subscribe(
res=>{
console.log(res);
localStorage.setItem('xAuthToken', res.json().token);
this.loggedIn=true;
const encodedCredentials = btoa(this.credentials.username + ':' + this.credentials.password);
localStorage.setItem("credentials",encodedCredentials);
location.reload();
},err=>{
console.log(err);
}
)
}
Пожалуйста, любая помощь очень полезнаreciated.Заранее благодарим за решение этой проблемы