我构建了一个提供身份验证处理程序的软件包。当方法/类用@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();
}