Я разрабатываю демонстрационную службу REST с помощью Spring Boot
, где пользователь должен войти в систему, чтобы выполнить определенное подмножество операций. После добавления Swagger UI
(используя библиотеку springfox
) с этой простой конфигурацией:
@Bean
public Docket docApi() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(any())
.paths(PathSelectors.ant("/api/**"))
.build()
.pathMapping("/")
.apiInfo(apiInfo())
.directModelSubstitute(LocalDate.class, String.class)
.useDefaultResponseMessages(true)
.enableUrlTemplating(true);
}
Я получаю все apis со всеми операциями, перечисленными на странице Swagger UI
. К сожалению, у меня нет конечных точек входа/выхода из системы, перечисленных среди них.
Проблема в том, что часть этих операций не может быть выполнена с помощью встроенной формы Swagger UI
(я нахожу ее действительно приятной функцией и хочу заставить ее работать), потому что пользователь не вошел в систему. Есть ли какое-либо решение для этого проблема? Можно ли вручную определить некоторые конечные точки в Swagger
?
Если появилась форма для отправки учетных данных (например, конечных точек входа/выхода из системы), я мог бы выполнить авторизацию перед использованием этих защищенных конечных точек. Затем Swagger
пользователь мог извлечь token/sessionid
из ответа и вставить его в настраиваемый параметр запроса, определенный через @ApiImplicitParams
.
Ниже вы можете найти мою конфигурацию безопасности:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.formLogin()
.loginProcessingUrl("/api/login")
.usernameParameter("username")
.passwordParameter("password")
.successHandler(new CustomAuthenticationSuccessHandler())
.failureHandler(new CustomAuthenticationFailureHandler())
.permitAll()
.and()
.logout()
.logoutUrl("/api/logout")
.logoutSuccessHandler(new CustomLogoutSuccessHandler())
.deleteCookies("JSESSIONID")
.permitAll()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(new CustomAuthenticationEntryPoint())
.and()
.authorizeRequests()
.and()
.headers()
.frameOptions()
.disable();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService)
.passwordEncoder(passwordEncoder());
}