2016-11-29 7 views
0

​​を使用してResfulアプリケーションを実装しました。私は、Mavenのパッケージに私の認証にdropwizard-AUTH-JWTを使用します。putとpostメソッドdropwizard-auth-jwt

<dependency>
<groupId>com.github.toastshaman</groupId>
<artifactId>dropwizard-auth-jwt</artifactId>
<version>1.0.2-0 </version>
</dependency>

リソースの認証を追加するために、私はそれが認証チェックだのための主要なクラスを使用して認証クラスを実装しているsampleAuthenticatorを実施しました。 MyUserとは、主に実装する際

public class UserAuthenticate implements Authenticator &ltJwtContext, MyUser> { 

    @Override 
    public Optional&ltMyUser> authenticate(JwtContext context) { 
     try { 
      final String subject = context.getJwtClaims().getSubject(); 
      if ("authentication".equals(subject)) { 
       return Optional.of(new MyUser("admin", "pass")); 
      } 
      return Optional.empty(); 
     } 
     catch (MalformedClaimException e) { return Optional.empty(); } 
    } 
} 

:この構成で

public class MyUser implements Principal { 

    private String pass; 
    private String name; 

    public MyUser(String name, String pass) { 
     this.pass = pass; 
     this.name = name; 
    } 
    public MyUser(String name){ 
     this.name = name; 
    } 
    public MyUser(){} 

    public String getPass() { 
     return pass; 
    } 

    @Override 
    public String getName() { 
     return name; 
    } 

    @Override 
    public String toString() { 
     return "MyUser{" + 
       "pass='" + pass + '\'' + 
       ", name='" + name + '\'' + 
       '}'; 
    } 

    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 
     final MyUser myUser = (MyUser) o; 
     return Objects.equals(pass, myUser.pass) && Objects.equals(name, myUser.name); 
    } 

    @Override 
    public int hashCode() { 
     return Objects.hash(pass, name); 
    } 
} 

を、私はCRUD操作のためのリソースを追加する必要がありました。 getとdeleteには問題はありません。投稿を追加したり、リクエストのボディに新しいオブジェクトを追加する必要があるときは、エラーが発生します。

ポスト:

@POST 
@Path("/") 
public Response create(@Auth MyUser admin, Body body) { 
    return Response 
      .status(Response.Status.OK) 
      .type(MediaType.APPLICATION_JSON) 
      .entity(true) 
      .build(); 
} 

エラー:

Caused by: org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization. [[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response myGroup.resources.BodyResource.create(myGroup.api.MyUser,myGroup.api.Body) at index 0.; source='ResourceMethod{httpMethod=POST, consumedTypes=[application/json], producedTypes=[application/json], suspended=false, suspendTimeout=0, suspendTimeoutUnit=MILLISECONDS, invocable=Invocable{handler=ClassBasedMethodHandler{handlerClass=class myGroup.resources.BodyResource, handlerConstructors=[[email protected]]}, definitionMethod=public javax.ws.rs.core.Response myGroup.resources.BodyResource.create(myGroup.api.MyUser,myGroup.api.Body), parameters=[Parameter [type=class myGroup.api.MyUser, source=null, defaultValue=null], Parameter [type=class myGroup.api.Body, source=null, defaultValue=null]], responseType=class javax.ws.rs.core.Response}, nameBindings=[]}', [WARNING] The (sub)resource method create in myGroup.resources.BodyResource contains empty path annotation.; source='public javax.ws.rs.core.Response myGroup.resources.BodyResource.create(myGroup.api.MyUser,myGroup.api.Body)'

答えて

1

Jersey@Path注釈はクラスレベルであることを望んでいます。私の答えはこちらをご覧ください:Parse request parameters without writing wrapper class

I don't know which version of dropwizard you are using but I couldn't make the combination of @POST and @Path("/something") annotation to behave when a method is annotated. I'm getting HTTP ERROR 404.

+0

tnx私はそれを持っていますが、問題はdropwizard-auth-jwtであると思います。私が言ったように、私はエラーを出さずにメソッドを取得して削除していますが、投稿を追加するとき、ジャージーは初期化エラーを返します – Divuneh

+0

dropwizard 1.0.5を使用しました – Divuneh

+0

私が言ったように、dropwizard-auth-jwtそのため、代わりにhttps://github.com/milpol/jwt-dropwizardを使用します。 – Divuneh

関連する問題