2014-01-15 5 views
0

Spring Data REST предоставляет данные и действия с помощью методов, определенных в репозиториях. Это все хорошо и денди. Однако мы используем случай, когда нам нужно контролировать содержимое и действия (методы HTTP), которые могут быть вызваны на основе пользователя и ролей. Любые указатели на то, как подойти к этому?Spring Data REST - контент и действия на основе пользователя и роли

Добавление безопасности в REST API может быть выполнено с использованием Oauth2.

ответ

0

В ответ на сообщение @JR Utely ответ правильного ответа, который обеспечивает уровень безопасности Spring Security, еще один вариант - использовать обработчики событий Spring DATA Rest, которые позволяют добавлять больше операций, подобных приведенному ниже примеру.

Просто определить и аннотированный Handler с аннотациями безопасности PrePost Spring в аннотированном

@Component 
@RepositoryEventHandler(Item.class) 
public class ItemEventHandler { 

    private Logger logger = LoggerFactory.getLogger(ItemEventHandler.class); 

    @HandleBeforeCreate 
    @Preauthorize("hasRole('ROLE_ADMIN') or hasAuthority('ACTION_CREATE_ITEM')") 
    public void handleItemBeforeCreate(Item item) { 
     //POST operation available for ADMINs and Users with ACTION_CREATE_ITEM privilege 
     logger.info("Creating item: " + item.toString()); 
     //more stuff if neccessary 
    } 

    @HandleBeforeSave 
    @Preauthorize("hasRole('ROLE_ADMIN') or hasAuthority('ACTION_UPDATE_ITEM')") 
    public void handleItemBeforeSave(Item item) { 
     //PUT operation available for ADMINs and Users with ACTION_UPDATE_ITEM privilege 
     logger.info("Updating item: " + item.toString()); 
     //more stuff if neccessary 
    } 

    @HandleBeforeDelete 
    @Preauthorize("hasRole('ROLE_ADMIN') or hasAuthority('ACTION_DELETE_ITEM')") 
    public void handleItemBeforeDelete(Item item) { 
     //DELETE operation available for ADMINs and Users with ACTION_DELETE_ITEM privilege 
     logger.info("Deleting item: " + item.toString()); 
     //more stuff if neccessary 
    } 
} 

Это полный список обработчиков событий Spring DATA Rest:

  • BeforeCreateEvent
  • AfterCreateEvent
  • BeforeSaveEvent
  • AfterSaveEvent
  • BeforeSaveEvent
  • BeforeLinkSaveEvent
  • AfterLinkSaveEvent
  • BeforeDeleteEvent
  • AfterDeleteEvent

Более подробная информация содержится в Spring DATA Rest Reference for event handling