Spring MVCとSpring Securityを使用していて、Swaggerのドキュメントを持っていたかったのです。私はチュートリアルhierに続き、url .../v2/api-docsの下に完全なjsonドキュメントを持っていました。swagger-uiがSpring MVC APIのAPI情報を取得しない
しかし、私もswagger-uiをオンにすると、URLの下にエラーページが表示されます.../swagger-ui.htmlスクリーンショットのように:すべてが定義されていません、彼は私のAPIを見ません。
Swagger-UiがSpringの設定に遭遇することがあり、リクエストがセキュリティで除外されないことがあることは知っています。この場合、問題になることはありますか?私はそれを動作させるために何を切ることができますか?
または、@ControllerAdvice
とマークされたクラスの問題になる可能性があります。私はExceptionResolverのためにそれを使用します。ここでは
@ControllerAdvice
public class ExceptionResolver extends AbstractHandlerExceptionResolver{...}
は私のMavenの抜粋です。
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.0</version>
</dependency>
あなたはおそらく、あなたの春のセキュリティで闊歩エンドポイントへのアクセスを有効にする必要がUPDATEマイSecurityConfiguration
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
private UserDetailsService userDetailsService;
private PreAuthenticatedAuthenticationProvider preAuthenticatedProvider;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
Map<String, List<GrantedAuthority>> rolesAuthorities = userDao.getRolesWithAutorities();
userDetailsService = new CustomUserDetailsService();
UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken> wrapper =
new UserDetailsByNameServiceWrapper<PreAuthenticatedAuthenticationToken>(userDetailsService);
preAuthenticatedProvider = new PreAuthenticatedAuthenticationProvider();
preAuthenticatedProvider.setPreAuthenticatedUserDetailsService(wrapper);
auth.authenticationProvider(preAuthenticatedProvider);
preAuthenticatedProvider.setThrowExceptionWhenTokenRejected(true);
}
@Override //(does not help)
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/**/v2/api-docs/**",
"/**/configuration/ui/**", "/**/swagger-resources/**", "/**/configuration/security/**", "/**/swagger-ui.html");
}
@Bean
public SmUserFailureHandler smUserFailureHandler(){
return new SmUserFailureHandler();
}
@Bean
public AccessDeniedHandler accessDeniedHandler(){
AccessDeniedHandlerImpl handler = new AccessDeniedHandlerImpl();
handler.setErrorPage("/errorpage/");
return handler;
}
public RequestHeaderAuthenticationFilter siteMinderFilter() throws Exception
{
RequestHeaderAuthenticationFilter siteMinderFilter = new DelegateRequestMatchingFilter(
new OrRequestMatcher(new AntPathRequestMatcher("...**"),
new AntPathRequestMatcher("..."),
smUserFailureHandler());
siteMinderFilter.setPrincipalRequestHeader("SM_USER");
siteMinderFilter.setAuthenticationManager(authenticationManager());
siteMinderFilter.setContinueFilterChainOnUnsuccessfulAuthentication(false);
siteMinderFilter.setExceptionIfHeaderMissing(false);
return siteMinderFilter;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
...
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
RequestHeaderAuthenticationFilter smFilter = siteMinderFilter();
http.addFilter(smFilter);
ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = http.authorizeRequests();
http = registry.and();
http.formLogin().loginPage("/resource/User/Login/").failureHandler(smUserFailureHandler());
http.formLogin().failureUrl("/resource/User/Login/").failureHandler(smUserFailureHandler());
http.csrf().disable();
http.headers().cacheControl().disable();
}
}
それが役立つかもしれない - https://github.com/arpitaggarwal/swagger -example – Arpit
http://stackoverflow.com/questions/43061496/swagger-maven-plugin-documentation-is-not-generated/43065956#43065956 – Vaibs
このようなantMatcherがある理由/ **/v2/api- docs/**? SpringFoxはスガージャーエンドポイントにプレフィックスを追加しません。すべてのエンドポイントのスプリングログを確認し、エンドポイントの名前を確認し、それに合わせてください。 –