Я также попытался внести чванство в свой спокойный веб-сервис, используя BasicAuthentification для некоторых операций моего веб-сервиса. Я импортировал чванство через maven в свой pom.xml:
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
<version>1.5.18</version>
</dependency>
В моем классе приложений я настроил BeanConfig:
import javax.ws.rs.ApplicationPath;
import io.swagger.jaxrs.config.BeanConfig;
@ApplicationPath("/rest")
public class Application extends javax.ws.rs.core.Application{
public Application() {
BeanConfig beanConfig = new BeanConfig();
beanConfig.setVersion("1.0");
beanConfig.setResourcePackage("de.mycompany.topic.ws");
beanConfig.setBasePath("/de.mycompany.topic.ws/rest/");
beanConfig.setScan(true);
}
}
Важно настроить BasicAuthentification в реализации ReaderListener с помощью аннотаций. basicAuth
— произвольное имя.
import io.swagger.annotations.BasicAuthDefinition;
import io.swagger.annotations.SecurityDefinition;
import io.swagger.annotations.SwaggerDefinition;
import io.swagger.jaxrs.Reader;
import io.swagger.jaxrs.config.ReaderListener;
import io.swagger.models.Swagger;
@SwaggerDefinition(securityDefinition = @SecurityDefinition(basicAuthDefinitions = {
@BasicAuthDefinition(key = "basicAuth")
}) )
public class SwaggerCustomizeDefinition implements ReaderListener {
@Override
public void beforeScan(Reader reader, Swagger swagger) {
}
@Override
public void afterScan(Reader reader, Swagger swagger) {
}
}
В MyRestService я комментирую свои операции, которые нельзя использовать без базовой аутентификации. См. здесь, например. для экономии клиентов:
@Api
@Path("/")
public class MyRestService {
private final static String UTF8 = ";charset=UTF-8";
@POST
@Path("/customer")
@Produces(MediaType.APPLICATION_JSON + UTF8)
@ApiOperation(
value = "Saves customer specified in the body",
notes = "note that appears in swagger ui",
authorizations = {
@Authorization(value = "basicAuth", scopes={})
})
@ApiResponses(value = {
@ApiResponse(code = 201, message = "customer created"),
@ApiResponse(code = 401, message = "Unauthorized"),
@ApiResponse(code = 404, message = "customer format not supported"),
})
public Response saveCustomer(
String content,
@BasicAuthDefinition(key = "basicAuth") @HeaderParam("Authorization") String authorization) {
// authorization
try {
if (!MyManager.isAuthorized(authorization)) {
return Response.status(Status.UNAUTHORIZED).build();
}
} catch (Exception e) {
return Response.status(Status.INTERNAL_SERVER_ERROR).build();
}
//do the work, authorization was ok
}
}
Вот и все. Я пробовал много вариантов, и это был единственный, который работал для меня в целом. Моя основная проблема заключалась в том, что кнопка авторизации не отображалась в пользовательском интерфейсе, а блокировка над отдельными методами в пользовательском интерфейсе swagger не была кликабельной, поэтому базовое модальное диалоговое окно аутентификации не появлялось. С этой реализацией это работает.
person
phil
schedule
21.03.2018