Я внедряю одну функцию входа в систему с использованием Quarkus. Процесс включает API A /Login, где после успешного входа в ответ генерируется и возвращается токен JWT. Токен также сохраняется в базе данных. Тем не менее, я сталкиваюсь с проблемами при использовании Quarkus-hibernate-reactive , и я сталкиваюсь с ошибкой:
»сеанс/EntityManager закрыт»
Ниже приведен код, который я использую для проверки токена для входа в единый сеанс. Не могли бы вы предоставить руководство о том, как правильно внедрить вход в отдельную сеанс в реактивной среде Quarkus, а также любые ссылки, которые могут помочь? < /P>
package asc.qrs.common;
import asc.qrs.repository.UserSessionRepository;
import io.quarkus.logging.Log;
import io.smallrye.mutiny.Uni;
import jakarta.annotation.Priority;
import jakarta.inject.Inject;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerRequestFilter;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.ext.Provider;
@Provider
@Priority(1)
public class SingleSessionFilter implements ContainerRequestFilter {
@Inject
UserSessionRepository userSessionRepository;
@Override
public void filter(ContainerRequestContext requestContext) {
String path = requestContext.getUriInfo().getPath();
if (path.equals(AppConstant.USER_LOGIN)) {
return; // Skip token validation for the login endpoint
}
Log.info("SingleSessionFilter started");
String header = requestContext.getHeaderString("Authorization");
if (header != null && header.startsWith("Bearer ")) {
String token = header.substring(7);
Log.infof("Extracted token: %s", token);
// Use reactive validation of the token
checkTokenValidity(token)
.subscribe().with(
isValid -> {
if (!isValid) {
Log.infof("Invalid token detected: %s", token);
abortRequest(requestContext, Response.Status.UNAUTHORIZED, "Invalid token");
} else {
Log.infof("Token is valid: %s", token);
}
},
failure -> {
Log.errorf("Error during token validation: %s", failure.getMessage());
abortRequest(requestContext, Response.Status.INTERNAL_SERVER_ERROR, "Internal error occurred");
}
);
} else {
Log.info("Authorization header missing or invalid");
abortRequest(requestContext, Response.Status.UNAUTHORIZED, "Authorization header is missing or invalid");
}
}
private Uni checkTokenValidity(String token) {
return userSessionRepository.countByToken(token)
.onItem().transform(count -> count > 0);
}
private void abortRequest(ContainerRequestContext requestContext, Response.Status status, String message) {
requestContext.abortWith(
Response.status(status).entity(message).build()
);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... -time-with
Одно сеанс вход с использованием Quarkus: реализация одного сеанса в время с Quarkus-Hibernate-Reactive ⇐ JAVA
Программисты JAVA общаются здесь
1738089476
Anonymous
Я внедряю одну функцию входа в систему с использованием Quarkus. Процесс включает API A /Login, где после успешного входа в ответ генерируется и возвращается токен JWT. Токен также сохраняется в базе данных. Тем не менее, я сталкиваюсь с проблемами при использовании [b] Quarkus-hibernate-reactive [/b], и я сталкиваюсь с ошибкой:
»сеанс/EntityManager закрыт»
Ниже приведен код, который я использую для проверки токена для входа в единый сеанс. Не могли бы вы предоставить руководство о том, как правильно внедрить вход в отдельную сеанс в реактивной среде Quarkus, а также любые ссылки, которые могут помочь? < /P>
package asc.qrs.common;
import asc.qrs.repository.UserSessionRepository;
import io.quarkus.logging.Log;
import io.smallrye.mutiny.Uni;
import jakarta.annotation.Priority;
import jakarta.inject.Inject;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.container.ContainerRequestFilter;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.ext.Provider;
@Provider
@Priority(1)
public class SingleSessionFilter implements ContainerRequestFilter {
@Inject
UserSessionRepository userSessionRepository;
@Override
public void filter(ContainerRequestContext requestContext) {
String path = requestContext.getUriInfo().getPath();
if (path.equals(AppConstant.USER_LOGIN)) {
return; // Skip token validation for the login endpoint
}
Log.info("SingleSessionFilter started");
String header = requestContext.getHeaderString("Authorization");
if (header != null && header.startsWith("Bearer ")) {
String token = header.substring(7);
Log.infof("Extracted token: %s", token);
// Use reactive validation of the token
checkTokenValidity(token)
.subscribe().with(
isValid -> {
if (!isValid) {
Log.infof("Invalid token detected: %s", token);
abortRequest(requestContext, Response.Status.UNAUTHORIZED, "Invalid token");
} else {
Log.infof("Token is valid: %s", token);
}
},
failure -> {
Log.errorf("Error during token validation: %s", failure.getMessage());
abortRequest(requestContext, Response.Status.INTERNAL_SERVER_ERROR, "Internal error occurred");
}
);
} else {
Log.info("Authorization header missing or invalid");
abortRequest(requestContext, Response.Status.UNAUTHORIZED, "Authorization header is missing or invalid");
}
}
private Uni checkTokenValidity(String token) {
return userSessionRepository.countByToken(token)
.onItem().transform(count -> count > 0);
}
private void abortRequest(ContainerRequestContext requestContext, Response.Status status, String message) {
requestContext.abortWith(
Response.status(status).entity(message).build()
);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79394876/single-session-sign-in-using-quarkus-implementing-single-session-at-a-time-with[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия