Я использую Spring MVC и Spring Security, и я хотел принести документацию Swagger. Я следил за руководством hier и получил полный json документ под URL ... / v2 / api-docs.
Но когда я также включил 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>
ОБНОВИТЬ мою конфигурацию безопасности
@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();
}
}