2017-01-03 12 views
11

У меня есть api, у которого есть разные потребители. Я бы хотел, чтобы они получили соответствующую документацию, основанную на их ролях в весенней безопасности.Swagger + Spring security - Скрыть методы, основанные на ролях

Например

Апи операция А суженные на роль A и B Роль

операции Апи B стягивается с ролью B

операция Апи С открыта для всех

Я нахожусь используя springfox, spring 4, spring rest, security

Я знаю, что есть аннотация @ApiIgnore, которую можно было бы использовать.

Возможно ли это?

+0

Как '@ ApiIgnore' быть полезным для вашего случая использования? Это просто предотвращает отображение некоторых ресурсов ... Если вы используете модель Spring Security с таблицами для хранения ролей, пользователей, разрешений и т. Д., Вы можете создать конечную точку для извлечения этих данных. Создайте все это как ресурсы, так как отображение Swagger не будет работать, потому что вам понадобятся поистине примечания Rest вокруг них. – bosco

+0

Ну, я имел в виду, возможно, я мог бы написать свою собственную аннотацию, в которой использовался апиор, где роли не было. или что-то типа того. –

ответ

-4

Возможно, вы уже это видели, но сама SpringFox предоставляет механизм для настройки безопасности. См. this section в официальной документации SpringFox и this section для примера (примечания № 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 работать.

+0

Благодарим вас за ответ, но это не решит мою проблему. Я уже защищаю свое приложение ролями, я хочу, чтобы документация учитывала это. –

+0

@EspenSchulstad Вы нашли решение для своей проблемы? благодаря – drenda

-2

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 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^