Java 使用Jersey进行REST API身份验证

Java 使用Jersey进行REST API身份验证,java,jersey,jax-rs,Java,Jersey,Jax Rs,我试图通过以下方式在我当前的JavaRESTfulAPI(Jersey)上实现身份验证。我将所有新的身份验证类放在一个“auth”包中。当我运行jquery示例代码时,它说“DemoBusinessRESTResourceProxy是一个接口,无法实例化”。因此,我研究并决定将Jersey注释放在DemoBusinessRESTResource上,并删除DemoBusinessRESTResourceProxy: @Local @Path("access/") @Stateless(name =

我试图通过以下方式在我当前的JavaRESTfulAPI(Jersey)上实现身份验证。我将所有新的身份验证类放在一个“auth”包中。当我运行jquery示例代码时,它说“DemoBusinessRESTResourceProxy是一个接口,无法实例化”。因此,我研究并决定将Jersey注释放在DemoBusinessRESTResource上,并删除DemoBusinessRESTResourceProxy:

@Local
@Path("access/")
@Stateless(name = "DemoBusinessRESTResource", mappedName = "ejb/DemoBusinessRESTResource")
public class DemoBusinessRESTResource {

    private static final long serialVersionUID = -6663599014192066936L;

    @POST
    @Path("/login")
    @Produces(MediaType.APPLICATION_JSON)
    public Response login(@Context HttpHeaders httpHeaders,
            @FormParam("username") String username,
            @FormParam("password") String password) {

        Authenticator authenticator = Authenticator.getInstance();
        String serviceKey = httpHeaders
                .getHeaderString(HTTPHeaderNames.SERVICE_KEY);

        try {
            String authToken = authenticator.login(serviceKey, username,
                    password);

            JsonObjectBuilder jsonObjBuilder = Json.createObjectBuilder();
            jsonObjBuilder.add("auth_token", authToken);
            JsonObject jsonObj = jsonObjBuilder.build();

            return getNoCacheResponseBuilder(Response.Status.OK).entity(
                    jsonObj.toString()).build();

        } catch (final LoginException ex) {
            JsonObjectBuilder jsonObjBuilder = Json.createObjectBuilder();
            jsonObjBuilder.add("message",
                    "Problem matching service key, username and password");
            JsonObject jsonObj = jsonObjBuilder.build();

            return getNoCacheResponseBuilder(Response.Status.UNAUTHORIZED)
                    .entity(jsonObj.toString()).build();
        }
    }

    @GET
    @Path("/demo-get-method")
    @Produces(MediaType.APPLICATION_JSON)
    public Response demoGetMethod() {
        JsonObjectBuilder jsonObjBuilder = Json.createObjectBuilder();
        jsonObjBuilder.add("message", "Executed demoGetMethod");
        JsonObject jsonObj = jsonObjBuilder.build();

        return getNoCacheResponseBuilder(Response.Status.OK).entity(
                jsonObj.toString()).build();
    }

    @POST
    @Path("/demo-post-method")
    @Produces(MediaType.APPLICATION_JSON)
    public Response demoPostMethod() {
        JsonObjectBuilder jsonObjBuilder = Json.createObjectBuilder();
        jsonObjBuilder.add("message", "Executed demoPostMethod");
        JsonObject jsonObj = jsonObjBuilder.build();

        return getNoCacheResponseBuilder(Response.Status.ACCEPTED).entity(
                jsonObj.toString()).build();
    }

    @POST
    @Path("/logout")
    public Response logout(@Context HttpHeaders httpHeaders) {
        try {
            Authenticator authenticator = Authenticator.getInstance();
            String serviceKey = httpHeaders
                    .getHeaderString(HTTPHeaderNames.SERVICE_KEY);
            String authToken = httpHeaders
                    .getHeaderString(HTTPHeaderNames.AUTH_TOKEN);

            authenticator.logout(serviceKey, authToken);

            return getNoCacheResponseBuilder(Response.Status.NO_CONTENT)
                    .build();
        } catch (final GeneralSecurityException ex) {
            return getNoCacheResponseBuilder(
                    Response.Status.INTERNAL_SERVER_ERROR).build();
        }
    }

    private Response.ResponseBuilder getNoCacheResponseBuilder(
            Response.Status status) {
        CacheControl cc = new CacheControl();
        cc.setNoCache(true);
        cc.setMaxAge(-1);
        cc.setMustRevalidate(true);

        return Response.status(status).cacheControl(cc);
    }
}
现在,我得到了这个错误:

调用EJB BusinessRESTResource方法时发生系统异常:public javax.ws.rs.core.Response com.rest.auth.DemoBusinessRESTResource.login(javax.ws.rs.core.HttpHeaders、java.lang.String、java.lang.String),原因是:java.lang.AbstractMethodError:com.sun.jersey.spi.container.ContainerRequest.getHeaderString(Ljava/lang/String;)Ljava/lang/String


我是Java WS新手,我完全迷路了。

我发现了问题。问题是jar版本文件。

我建议改为使用。就这样?没有任何帮助?我在我的项目中不使用maven。如何做到这一点?我把它当作帮助-如果有人在你之前写过它,为什么要这样做?关于maven-这是我在谷歌搜索它时得到的。