2017-04-27 6 views
2

Spring Bootで構築されたSwagger-annotated Jersey 2.0 Webサービスの基本認証をSwagger UIに追加しようとしています。私が使用しています:Jersey 2とSpring Bootを使用した注釈駆動swagger.jsonへの認証の追加

  • 春ブーツ1.5.4
  • 春ブート・スターター・ジャージ
  • 闊歩UI 3.0.4
  • (Mavenのパッケージ)威張っ-jersey2-jaxrs 1.5.13

次のJerseyConfigとSwaggerアノテーションを使用して、リソースにswagger.jsonファイルを生成できます。 This article was immensely helpful in getting this far

@Component 
public class JerseyConfiguration extends ResourceConfig { 
    private static Log logger = LogFactory.getLog(JerseyConfiguration.class); 

    @Value("${spring.jersey.application-path:/}") 
    private String apiPath; 

    public JerseyConfiguration() { 
    registerEndpoints(); 
    configureSwagger(); 
    } 

    private void registerEndpoints() { 
    register(MyEndpoints.class); 

    // Generate Jersey WADL at /<Jersey's servlet path>/application.wadl 
    register(WadlResource.class); 

    // Lets us get to static content like swagger 
    property(ServletProperties.FILTER_STATIC_CONTENT_REGEX, "((/swagger/.*)|(.*\\.html))"); 
    } 


    /** 
    * Configure the Swagger documentation for this API. 
    */ 
    private void configureSwagger() { 
    // Creates file at localhost:port/swagger.json 
    this.register(ApiListingResource.class); 
    this.register(SwaggerSerializers.class); 


    BeanConfig config = new BeanConfig(); 
    config.setConfigId("example-jersey-app"); 
    config.setTitle("Spring Boot + Jersey + Swagger"); 
    config.setVersion("2"); 
    config.setContact("Me <[email protected]>"); 
    config.setSchemes(new String[] {"http", "https"}); 
    config.setResourcePackage("com.example.api"); 
    config.setBasePath(this.apiPath); 
    config.setPrettyPrint(true); 
    config.setScan(true); 
    } 
} 

基本認証を使用して、Swagger UIからこれらのサービスに接続できるようにしたいと考えています。私はそれをSpringで設定し、それを使ってサイトを認証できますが、Swagger UIからは認証できません。 残念ながら、スプリングブートexamples currently on the Swagger sample siteにはジャージーと認証が含まれておらず、ジャージーの例では私のプロジェクトでonを使用しているようなSpring Bootと@SpringBootApplicationを使用していません。

Swagger UIにBasic Authを表示するにはどうすればよいですか?

答えて

6

ServletConfigAwareJerseyConfigurationを追加すると、これを動作させることができました。それで、私はSwagger Bootstrap.java examplesで使われているのと同じスタイルのSwagger設定を使うことができました。

@Component 
public class JerseyConfiguration extends ResourceConfig implements ServletConfigAware{ 
    private ServletConfig servletConfig; 

// ... this is all unchanged ... 

    /** 
    * Configure the Swagger documentation for this API. 
    */ 
    private void configureSwagger() { 
    // Creates file at localhost:port/swagger.json 
    this.register(ApiListingResource.class); 
    this.register(SwaggerSerializers.class); 


    BeanConfig config = new BeanConfig(); 

// ... this is all unchanged ... 

    config.setScan(true); 

    Swagger swagger = new Swagger(); 
    swagger.securityDefinition("basicAuth", new BasicAuthDefinition()); 
    new SwaggerContextService().withServletConfig(servletConfig).updateSwagger(swagger); 

    } 

    @Override 
    public void setServletConfig(ServletConfig servletConfig) { 
    logger.info("Setting ServletConfig"); 
    this.servletConfig = servletConfig; 
    } 
} 

これらの変更を行って、私のエンドポイントに次のような注釈を追加した後:

は私swagger.jsonに追加しました::

"securityDefinitions":{"basicAuth":{"type":"basic"}} 
... 
"security":[{"basicAuth":[]}]}} 

@Api(value = "/api", description = "My super API", 
authorizations = {@Authorization(value="basicAuth")}) 
@Path("api") 
@Component 
public class MyApi { 

私は次のように変更しました

また、Swagger UIでは、新しい緑のボタンがSchemes drと同じ行に表示されましたそれはオープンロックで "Authorize"と言われています。私がクリックすると、ユーザー名とパスワードを入力できるポップアップが表示されます。これで、Swagger UIの「Try It」機能を使用すると、これらの資格情報がAPIに送信されます。

+0

天に感謝します。 –

+0

私はこれを探してきました。 –

関連する問題