使用会话进行注释认证

时间:2014-12-16 14:31:50

标签: java jersey guice embedded-jetty

我开始在我的项目中使用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作为拦截器来管理身份验证? 我的要求是我可以访问会话目标资源

这可能吗?

0 个答案:

没有答案