ContainerRequestFilter无法在外部程序包中工作

时间:2019-01-23 11:45:26

标签: java

我构建了一个提供身份验证处理程序的软件包。当方法/类用@Secured注释时,将触发该引擎,因此将触发ContainerRequestFilter

但是我在另一个包中使用了这个库,并且当我使用@Secured注释方法时,不会触发ContainerRequestFilter`引擎。所以我需要帮助。

我尝试使用@Inject@EJB手动导入,但是当我将该应用程序部署到weblogic容器中时,出现了一些有关依赖项的错误。

AuthenticatePackage-

拦截器:

import javax.annotation.Priority;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.Priorities;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Secured
@Provider
@Priority(Priorities.AUTHORIZATION)
public class SecurityInterceptor implements ContainerRequestFilter {

    @Context private ResourceInfo resourceInfo;
    @Inject private JWTService jwtService;

    public static final String AUTHENTICATION_SCHEME = "Bearer";

....

注释

import javax.ws.rs.NameBinding;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@NameBinding
@Retention(RUNTIME)
@Target({TYPE, METHOD})
public @interface Secured {
    String[] roles() default {};
}

当我使用该引擎时打包

  @GET
    @Path("/getSignedUser")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    @Secured
    public Response getSignedUser(@HeaderParam("Authorization") String token)  {
    UserSchema userSchema = this.authenticationService.getSignedUser(token.substring(SecurityInterceptor.AUTHENTICATION_SCHEME.length()).trim());
        return Response.status(Response.Status.OK).entity(userSchema).build();
}

0 个答案:

没有答案