に追加
public class MyInterceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//let's disable OPTIONS and HEAD
if (request.getMethod().equalsIgnoreCase("OPTIONS") || request.getMethod().equalsIgnoreCase("HEAD")) {
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Unauthorized Request");
return false;
} else {
return true;
}
}
}
をグアバ述語を受け入れ、そのApiSelectorBuilderと非常に単純です。
このスニペットは、すべてのメソッドをapi-docsおよびswagger-uiから除外します。htmlはOPTIONS、HEAD、またはPATCHです。
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(Predicates.not(requestHandler -> {
// exclude all methods being OPTIONS, HEAD or PATCH
final Set<RequestMethod> methods = requestHandler.getRequestMapping().getMethodsCondition().getMethods();
return !Collections.disjoint(methods, Arrays.asList(RequestMethod.OPTIONS, RequestMethod.HEAD, RequestMethod.PATCH));
}))
.build();
}
これを簡単に拡張して、common/errorsコントローラをさらに除外することができます。
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(Predicates
.and(
// exclude /errors
Predicates.not(requestHandler -> requestHandler.getRequestMapping().getPatternsCondition().getPatterns().contains("/error")),
// exclude all methods being OPTIONS, HEAD or PATCH
Predicates.not(requestHandler -> !Collections.disjoint(requestHandler.getRequestMapping().getMethodsCondition().getMethods(),
Arrays.asList(RequestMethod.OPTIONS, RequestMethod.HEAD, RequestMethod.PATCH)))
)
)
.build();
}
難しい質問。 RestEntityControllerのヒントを教えてください。 – mika