Оттуда я хочу создать пользовательский контекст с аннотацией @RequestScoped и аннотированным классом @provider , который реализует ContainerRequestContext < /code> Чтобы распространить мой токен в моем приложении, не пропуская его через промежуточные слои. < /p>
Вот мой @RequestScoped аннотированный класс:
Код: Выделить всё
@RequestScoped
public class UserContext {
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
< /code>
Вот мой класс фильтров: < /p>
@Provider
public class AuthenticationContextProvider implements ContainerRequestFilter {
@Inject
UserContext userContext;
@Override
public void filter(ContainerRequestContext requestContext) {
var securityContext = requestContext.getSecurityContext();
if(securityContext != null) {
var principal = securityContext.getUserPrincipal();
if(principal != null && principal instanceof JWTCallerPrincipal jwt) {
userContext.setId(jwt.getName());
} else if (principal != null) {
userContext.setId(principal.getName());
}
}
}
}
@Singleton
public class GreetingResource {
@Inject
UserContext userContext;
@GET
@Path("/hello")
public String sayHello() {
return "Hello " + userContext.getId();
}
}
< /code>
Проблема в том, что когда я получаю свой контекст из слоя в своем приложении (с @Inject, как с @Context), я получаю не нулевой экземпляр моего контекстного класса, но но Все его поля являются нулевым. Я установил точку останова сразу после вызова моего контекста, чтобы проверить, было ли поле обновлено, но это не так, оно все еще ноль. < /P>
Я использую Quarkus версию 3.18 .4 С этими зависимостями: < /p>
- Quarkus-Arc < /li>
Quarkus-rest < /li>
Quarkus-rest-jackson - Quarkus-hibernate-panache
- Quarkus-jdbc-postgresql
- Quarkus-hibernate-Validator
- Quarkus-oidc
Есть ли у вас какие -либо идеи ?
Подробнее здесь: https://stackoverflow.com/questions/794 ... -annotatio