如何将swaggerUI与spring secure Rest服务集成?

时间:2016-10-29 14:58:58

标签: swagger

I have my spring project war which contains Secure REST services.I need to integrate these Rest Services with swagger UI but everytime I am getting an exception like:-"HTTP-401 Full Authenticatuion required to access the resource" for my below snippet code:

这是加载我的项目战争档案

的REst APIS的配置类
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurerAdapter {

    @Bean
    public Docket petApi() {
This is docket class which creates swagger documentation.

        return new Docket(DocumentationType.SWAGGER_2).select().apis(RequestHandlerSelectors.any()).paths(PathSelectors.any()).build()
                    .pathMapping("/").directModelSubstitute(LocalDate.class, String.class).genericModelSubstitutes(ResponseEntity.class);
    }

}

这是具有自定义方法getdocumentation方法的控制器类,该方法将在内部调用spring控制器并获取提供的文档我使用的是springfox-swagger-ui 2.0 maven依赖项。

@Controller
public class Swagger2Controller {

    public static final String DEFAULT_URL = "/v2/api-docs";

    @Value("${springfox.documentation.swagger.v2.host:DEFAULT}")
    private String hostNameOverride;

    @Autowired
    private DocumentationCache documentationCache;

    @Autowired
    private ServiceModelToSwagger2Mapper mapper;

    @Autowired
    private JsonSerializer jsonSerializer;

    @RequestMapping(value = { "/Vijay" }, method = { org.springframework.web.bind.annotation.RequestMethod.GET })
    @ResponseBody
    public ResponseEntity<Json> getDocumentation(@RequestParam(value = "group", required = false) String swaggerGroup) {

        String groupName = Optional.fromNullable(swaggerGroup).or("default");
        Documentation documentation = this.documentationCache.documentationByGroup(groupName);
        if (documentation == null) {
            return new ResponseEntity(HttpStatus.NOT_FOUND);
        }
        Swagger swagger = this.mapper.mapDocumentation(documentation);
        swagger.host(hostName());
        return new ResponseEntity(this.jsonSerializer.toJson(swagger), HttpStatus.OK);
    }

    private String hostName() {

        if ("DEFAULT".equals(this.hostNameOverride)) {
            URI uri = ControllerLinkBuilder.linkTo(Swagger2Controller.class).toUri();
            String host = uri.getHost();
            int port = uri.getPort();
            if (port > -1) {
                return String.format("%s:%d", new Object[] { host, Integer.valueOf(port) });
            }
            return host;
        }
        return this.hostNameOverride;
    }

}

Any Help or suggestion will be highly appreciated. provided I have already written security as non in context.xml file of respective spring project like

<mvc:default-servlet-handler />
    <mvc:resources mapping="/webjars/*" location="classpath:/META-INF/resources/webjars" />
    <mvc:resources mapping="/swagger-resources/*" location="classpath:/META-INF/resources/" />
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" />
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter" />
    <bean class="com.swagger.config.SwaggerConfig" />
    <bean class="com.swagger.controller.Swagger2Controller" />

But still getting exception as mentioned above

0 个答案:

没有答案