Когда я создал свой подресурс, мой Injection (authenticatedUser) является нулевым.Но в корневом классе (authenticatedUser) у Injection были правильные значения.Поэтому, когда я использовал
/ medicos / me
, я получаю правильные значения, но когда я использовал
/ medicos / me/ pacientes
Я получаю нулевую ошибку от authenticatedUser в подресурсе PacienteResource.Я не понимаю, и как я могу решить эту зависимость в подресурсе.Эта зависимость (authenticatedUser) создается в фильтре аутентификации.
@Path("/medicos")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class MedicoResource {
@Inject
@AuthenticatedUser
Usuario authenticatedUser;
@GET
@Path("me")
@Produces(MediaType.TEXT_PLAIN)
public Response getMedico() {
return Response.ok(authenticatedUser.getMedico().getNombre()).build();
}
@Path("/me/pacientes")
public PacienteResource getMedicoPacientes() {
System.out.println("get medico pacientes");
return new PacienteResource();//This is the problem.
}
}
У класса подресурсов также есть authenticatedUser, но когда я его использовал, это значение равно null.
public class PacienteResource {
@Inject
@AuthenticatedUser
private Usuario authenticatedUser;
@Inject
PacienteService pacienteService;
@GET
@RolesAllowed({"MEDICO"})
public Set<Paciente> getPacientes() {
Set<Paciente> pacientes = authenticatedUser.getMedico().getPacienteSet();
return pacientes;
}
}
Это мой производитель@AuthenticatedUser.Фильтр «Аутентификация» генерирует событие, для этого наблюдателя «handleAuthenticationEvent».Затем, когда мне нужен аутентифицированный пользователь, мне нужно только ввести @AuthenticatedUser.Но когда я создал новый экземпляр pacienteResource, AuthenticatedUser не был создан.
@RequestScoped
public class AuthenticatedUserProducer {
@Inject
private UsuarioService usuarioService;
private Usuario authenticatedUser;
public void handleAuthenticationEvent(@Observes @AuthenticatedUser String username) {
this.authenticatedUser = findUser(username);
}
private Usuario findUser(String username) {
Usuario usuario = usuarioService.findByUserName(username);
return usuario;
}
@Produces
@RequestScoped
@AuthenticatedUser
public Usuario createLogger() {
return authenticatedUser;
}
}
@Qualifier
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER})
public @interface AuthenticatedUser {
}