我开始在我的项目中使用Guice,但是我不得不重新实现使用Jersey只运行良好的Authentication Interceptor。
我的旧代码让我可以访问ResourceInfo和HttpServletRequest,执行以下操作:
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthenticationInterceptor implements javax.ws.rs.container.ContainerRequestFilter
{
@Context
private ResourceInfo resourceInfo;
@Context
HttpServletRequest webRequest;
@Override
public void filter(ContainerRequestContext requestContext) {
// Resource, Which gives me the Target Function (From here i can check annotations)
Method method = resourceInfo.getResourceMethod();
// User object in the session, which contains a list of permissions
UserEntity user = (UserEntity) webRequest.getSession().getAttribute("user");
// DO auth....
}
}
可悲的是,当尝试在Guice中使用此接口时,我没有得到任何上下文 (resourceInfo和webRequests保持为null)
我已尝试使用javax.servlet.filter,但我似乎无法访问目标方法
我的Guice配置是:
@Override
protected void configureServlets() {
bind(DebugController.class).in(Singleton.class);
bind(MessageBodyReader.class).to(JacksonJsonProvider.class);
bind(MessageBodyWriter.class).to(JacksonJsonProvider.class);
HashMap<String, String> options = new HashMap<>();
options.put("com.sun.jersey.api.json.POJOMappingFeature", "true");
serve("/api/*").with(GuiceContainer.class, options);
}
编辑: 我也尝试过使用
public class AuthorisationInterceptor implements MethodInterceptor {
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
// Allow invocation to process or throw an appropriate exception
}
}
但我很有趣,我无法访问会话。
所以我的问题是:如何使用Guice作为拦截器来管理身份验证? 我的要求是我可以访问会话和目标资源?
这可能吗?