Фильтр запроса Jersey 2 не работает в этом коде - PullRequest
0 голосов
/ 05 ноября 2018

Я реализовал аннотацию с использованием Jersey 2, но почему-то код не достигает этой точки.

Это мои занятия:

Обеспеченные

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;

import javax.ws.rs.NameBinding;

@NameBinding
@Retention(RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Secured { }

SecureImplementation:

import javax.annotation.Priority;
import javax.ws.rs.Priorities;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.Provider;

@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class SecureImplementation implements ContainerRequestFilter
{
  @Override
    public void filter(ContainerRequestContext requestContext) throws 
  IOException {
        System.out.println("Inside Something");
        throw new WebApplicationException(Status.UNAUTHORIZED);
}
}

TestingClass

@Path("/checkClass")
public class TestingClass{

    @Secured
    @Path("/checkFilter")
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Map<String, String> testing(Input input)
            throws Exception {
        Map<String, Object> responseMap = new HashMap<String, Object>();
        responseMap.put("result","Success");
        return responseMap;
   }
  }

Он дает мне ответ вместо того, чтобы выдавать ошибку 401. Итак, что я здесь не так делаю?

1 Ответ

0 голосов
/ 05 ноября 2018

Обычно TestingClass должен быть зарегистрирован внутри класса приложения вместе с фильтром, например ::10000

@ApplicationPath("checkClass")
public class MyApplication extends ResourceConfig {

    public MyApplication () {
        register(TestingClass.class);
        register(SecureImplementation.class);
    }
}


@Path("/checkFilter")
public class TestingClass{

    @Secured
    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public Map<String, String> testing(Input input)
...