Swagger-ui with Spring security

后端 未结 3 1814
遇见更好的自我
遇见更好的自我 2021-01-23 07:21

I have a simple REST application with authentication service. I tried to add swagger and swagger-ui to it, but I can only see my endpoints in /v2/api-docs. In

相关标签:
3条回答
  • 2021-01-23 07:53

    First you should registry swagger's resources.

    @Configuration
    public class WebMvcConfig extends WebMvcConfigurerAdapter {
    
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("swagger-ui.html")
                    .addResourceLocations("classpath:/META-INF/resources/");
        }
    }
    

    Then cause you're using Spring Security,maybe you should shutdown privileges.

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

    And maybe it's better for you to use swagger which the version is under 2.8.0,or you may have to face to lots of bugs.

    0 讨论(0)
  • 2021-01-23 08:11

    For me, there was no issue in traditional Weblogic deployment without any mention of @Override public void configure(WebSecurity web) throws Exception ...Only @Override protected void configure(HttpSecurity http) throws Exception was enough and UI was visible on swagger.

    But the same code was not working on Apache Tomcat server so below code was needed ,

    @Override public void configure(WebSecurity web) throws Exception { web.ignoring().mvcMatchers(HttpMethod.OPTIONS, "/**"); // ignore swagger web.ignoring().mvcMatchers("/swagger-ui.html/**", "/configuration/**", "/swagger-resources/**", "/v2/api-docs","/webjars/**"); }

    /webjars/** being missing in answer by AokoQin.

    Answering here because I don't faced any issues on Weblogic without above code but only Tomcat. I already had resources added via ResourceHandlerRegistry in mvc config.

    0 讨论(0)
  • 2021-01-23 08:13

    The previous answers helped me, but are not quite complete / outdated. I was facing the same issue and it's working now:

    @Configuration
    public class WebMvcConfiguration extends WebMvcConfigurationSupport {
    
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("swagger-ui.html")
                    .addResourceLocations("classpath:/META-INF/resources/");
    
            registry.addResourceHandler("/webjars/**")
                    .addResourceLocations("classpath:/META-INF/resources/webjars/");
        }
    }
    
    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
      ...
    
      @Override
      public void configure(WebSecurity web) throws Exception {
        web
          .ignoring()
            .mvcMatchers("/swagger-ui.html/**", "/configuration/**", "/swagger-resources/**", "/v2/api-docs", "/webjars/**");
      }
    
      ...
    
    }
    
    0 讨论(0)
提交回复
热议问题