Я ищу способ для того, чтобы придать @RequestScoped
пользовательский класс в моем @Stateless
JAX-RS конечной точки:HttpServletRequest инъекции на RequestScoped боба CDI
Я хочу, чтобы каждый раз, когда приложение получает запрос мой пользовательский класс впрыскивается в моей конечной точке JAX-RS.
Пользовательский класс:
@RequestScoped
public class CurrentTransaction {
private String user;
private String token;
@PersistenceContext(name="mysql")
protected EntityManager em;
@Inject HttpServletRequest request;
public CurrentTransaction() {
this.user = request.getHeader("user");
this.token = request.getHeader("token");
}
//getters and setters ...
}
Таким образом, я заявляю о своем CurrentTransaction
класс как @RequestScoped
для того, чтобы инициализировать каждый раз при получении запроса. Для этого мне нужно получить доступ к HttpServletResquest
, чтобы получить параметры заголовка.
JAX-RS конечная точка:
@Stateless
@Path("/areas")
public class AreasEndpoint {
@PersistenceContext(unitName = "mysql")
protected EntityManager em;
@Inject
protected CurrentTransaction current_user_service;
@POST
@Path("postman")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Authentication
public Response create(AreaRequest request) {
if (this.current_user_service.getUser() == null) {
System.out.println("Go!!!");
return Response.status(Status.FORBIDDEN).build();
} else {
System.out.println("---- user: " + this.current_user_service.getUser());
System.out.println("---- token: " + this.current_user_service.getToken());
}
}
// ...
}
CDI прибыть выполнить конструктор CurrentTransaction
класса. Однако поле запроса HttpServletRequest
не инициализируется (вводится).
Что я делаю неправильно?
Где вы размещаете? Включить версии. Любые трассировки стека также помогут. –