Безопасность Swagger + Spring - скрыть методы, основанные на ролях
У меня есть api, у которого есть разные потребители. Я бы хотел, чтобы они получили соответствующую документацию на основе своих ролей в безопасности spring.
например
Операция Api A ограничена ролью A и ролью B
Операция Api B ограничена ролью B
Операция Api C открыта для всех
Я использую springfox, spring 4, spring отдых, безопасность
Я знаю, что есть аннотация @ApiIgnore, которую можно было бы использовать.
Возможно ли это?
Ответы
Ответ 1
Blockquote Вы можете использовать ниже фрагмент кода в вашем файле конфигурации безопасности, и вам необходимо расширить функцию GlobalMethodSecurityConfiguration.
@Autowired Auth2ServerConfiguration auth2ServerConfiguration;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
return new OAuth2MethodSecurityExpressionHandler();
}
в API используется ниже код следующим образом
@PreAuthorize("hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')")
@Transactional(readOnly = true)
public @ResponseBody ModelAndView abc() {
//do something
}
Ответ 2
Возможно, вы уже это видели, но сама SpringFox предоставляет механизм для настройки безопасности. См. этот раздел в официальной документации SpringFox и этот раздел для примера (примечания № 14 и № 15).
Если вы открыты, чтобы позволить различным пользователям просматривать API-интерфейсы, но все еще не в состоянии выполнять API, вы можете рассмотреть возможность добавления @Secured аннотация в API с соответствующими ролями.
Например:
@Secured ({"ROLE_A", "ROLE_B")
@RequestMapping ("/open/to/both")
public String operationA() {
// do something
}
@Secured ("ROLE_B")
@RequestMapping ("/open/to/b/only")
public String operationB() {
// do something
}
// No @Secured annotation here
@RequestMapping ("/open/to/all")
public String operationC() {
// do something
}
Убедитесь, что вы добавили @EnableGlobalMethodSecurity (securedEnabled = true)
в свой класс SecurityConfig
(или что-то еще, что у вас есть) для работы @Secured.