2017-11-29 3 views
0

JWT를 통해 Auth 용 Jersey의 NameBinding을 사용하여 사용자 정의 주석을 만들고 싶습니다.이 기술을 다른 일반 Java 프로젝트에서 사용했지만 모든 것이 완벽하게 작동하지만 DropWizard 프로젝트에서는 작동하지 않습니다. 내가 아는 한 DW 또한 REST를 위해 Jersey를 사용합니다. 이것은 내 테스트 코드이지만 작동하지 않습니다.DropWizard에서 이름 바인딩 (저지)

인터페이스 :

@NameBinding 
@Retention(RUNTIME) 
@Target({TYPE, METHOD}) 
public @interface Auth {} 

구현 :

@Auth 
@Provider 
public class AuthFilter implements ContainerRequestFilter { 

    private static final String SECRET = "SOME_SECRET_STRING"; 

    @Override 
    public void filter(ContainerRequestContext requestContext) throws IOException { 
     try { 
      String userToken = requestContext.getHeaderString("token"); 
      Claims body = Jwts.parser().setSigningKey(SECRET).parseClaimsJws(userToken).getBody(); 
      if(body.getExpiration().before(new Date())) { 
       requestContext.abortWith(Response 
         .status(Response.Status.UNAUTHORIZED) 
         .entity("Token is expired") 
         .build()); 
      } 
     } catch (Exception e) { 
      requestContext.abortWith(Response 
        .status(Response.Status.UNAUTHORIZED) 
        .entity("Error") 
        .build()); 
     } 
    } 
} 

나머지 :

@GET 
@Path("/test") 
@Auth 
public String test() { 
    return "Hello, " + userName; 
} 

할 수있는 사람 그 이 문제는?

답변

0

해결책을 찾은 후 누군가에게 도움이 될 답변을 게시하십시오. run 메소드에 AuthFilter 클래스를 등록해야했습니다.

environment.jersey().register(new AuthFilter());