2017-05-10 15 views
0

Spring MVCとSpring Securityを使用していて、Swaggerのドキュメントを持っていたかったのです。私はチュートリアルhierに続き、url .../v2/api-docsの下に完全なjsonドキュメントを持っていました。swagger-uiがSpring MVC APIのAPI情報を取得しない

しかし、私もswagger-uiをオンにすると、URLの下にエラーページが表示されます.../swagger-ui.htmlスクリーンショットのように:すべてが定義されていません、彼は私のAPIを見ません。 enter image description here

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(); 

} 
} 
+0

それが役立つかもしれない - https://github.com/arpitaggarwal/swagger -example – Arpit

+0

http://stackoverflow.com/questions/43061496/swagger-maven-plugin-documentation-is-not-generated/43065956#43065956 – Vaibs

+0

このようなantMatcherがある理由/ **/v2/api- docs/**? SpringFoxはスガージャーエンドポイントにプレフィックスを追加しません。すべてのエンドポイントのスプリングログを確認し、エンドポイントの名前を確認し、それに合わせてください。 –

答えて

0

は、構成。

これらはspringfoxによって作成されたエンドポイントです:

2017-05-10 15:07:15.141 INFO 22472 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v2/api-docs],methods=[GET],produces=[application/json || application/hal+json]}" onto public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest) 
2017-05-10 15:07:15.146 INFO 22472 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/swagger-resources/configuration/ui]}" onto org.springframework.http.ResponseEntity<springfox.documentation.swagger.web.UiConfiguration> springfox.documentation.swagger.web.ApiResourceController.uiConfiguration() 
2017-05-10 15:07:15.147 INFO 22472 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/swagger-resources/configuration/security]}" onto org.springframework.http.ResponseEntity<springfox.documentation.swagger.web.SecurityConfiguration> springfox.documentation.swagger.web.ApiResourceController.securityConfiguration() 
2017-05-10 15:07:15.148 INFO 22472 --- [ restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/swagger-resources]}" onto org.springframework.http.ResponseEntity<java.util.List<springfox.documentation.swagger.web.SwaggerResource>> springfox.documentation.swagger.web.ApiResourceController.swaggerResources() 

あなたの春のセキュリティの設定クラスにこのメソッドを追加します。

@Configuration 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/v2/api-docs", "/configuration/ui", "/swagger-resources", "/configuration/security", "/swagger-ui.html"); 
    } 

} 
+0

それは動作しません。このURIを除外しない場合もあります – user2957954

+0

ここにあなたの春のセキュリティ設定クラスを置くことができますか?それはそこに何かあるかもしれない。また、端切れのエンドポイントをカールしようとすることはできますか?それが403にそのセキュリティを与えるなら。 –

+1

セキュリティ設定を追加しました – user2957954

関連する問題