0
我正在開發一個Java/Jersey的休息應用程序,並且我在應用程序的行爲中遇到了一些問題。Java/Jersey在執行任何操作之前運行我的所有資源
事情是......我有一個文件夾,我把我的資源,他們擴展名爲API的父類,執行基於令牌的身份驗證。
問題是,當我訪問任何應用程序端點時,在訪問我的模型之前,父類中的驗證方法會運行多次。 有誰能告訴我爲什麼會發生這種情況?
我的父類的API
@Provider
public class Api extends GensonContextResolver implements ContainerRequestFilter {
@Context
private UriInfo info;
public static final String AUTHENTICATION_TOKEN = "token";
protected ObjectResponse objectResponse;
protected UsuariosModel userInfo;
public Api() {
}
@Override
public void filter(ContainerRequestContext containerRequest) throws WebApplicationException {
this.objectResponse = new ObjectResponse();
this.userInfo = new UsuariosModel();
UriInfo info = containerRequest.getUriInfo();
// não realiza a valização se o endpoint for o de validação de acesso
if(info.getPath().equals("autenticacao/valida-acesso")) {
return;
}
try {
String token = containerRequest.getHeaderString(AUTHENTICATION_TOKEN);
AutenticacaoController autenticacaoControler = new AutenticacaoController();
this.objectResponse = autenticacaoControler.validaToken(token);
UsuariosController usuariosController = new UsuariosController();
this.userInfo = usuariosController.selecionaDadosUsuario(token);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (this.objectResponse.getMessage() != null) {
Response response = Response.status(this.objectResponse.getCode()).entity(this.objectResponse).build();
containerRequest.abortWith(response);
}
}
}
資源例如
@Path("/descontos")
public class DescontosResource extends Api{
public DescontosResource() {
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response doGet() throws SQLException, NamingException {
DescontosController descontosController = new DescontosController();
this.objectResponse = descontosController.selecionaDescontos();
return Response.status(this.objectResponse.getCode()).entity(this.objectResponse).build();
}
@POST
@Path("clientes")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public Response doPostClientes(DescontosModel descontos) throws SQLException, NamingException {
DescontosController descontosController = new DescontosController();
this.objectResponse = descontosController.cadastraDescontosClientes(descontos);
return Response.status(this.objectResponse.getCode()).entity(this.objectResponse).build();
}
}