2015-10-29 4 views
1

Я ищу, чтобы создать пользовательскую аннотацию, предназначенную для проверки того, уполномочен ли пользователь действовать с определенным идентификатором продукта. Аннотации будут помещены в методы моего контроллера, которые запускаются в приложении, управляемом Spring.Пользовательская аннотация для авторизации

@ProductDemand(id = {productId}) 
@RequestMapping(value = "/product/{productID}", method = RequestMethod.PUT) 
public Product update(Product toUpdate) { 
    User user = getUserFromHeaderValues(); 
} 

В этом сценарии @ProductDemand обычай аннотацию я буду необходимости создавать. Если пользователь не имеет права действовать на продукт с заданным идентификатором, я хотел бы возвращать 403.

То, что я до сих пор является аннотацией:

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ProductDemand { 
    String productId; 
} 

У меня также есть обслуживание санкционировать эти значения:

public class AuthorizationService { 
    public boolean authorize(UUID userUUID, String productID) { 
     //do auth 
    } 
} 

то, что я хотел бы сделать, это быть в состоянии поставить эту аннотацию любого способа, и она автоматически вызывается метод авторизации в AuthorizationService. Очевидно, что между ними будет какая-то сантехника, чтобы получить значения и подключить службу авторизации, но я не знаю, как это сделать. Предпочтительно, я хотел бы иметь возможность собрать все это и позволить кому-то иметь возможность импортировать его в свой проект и иметь возможность использовать его, просто добавив аннотации и, возможно, bean-компонент, если это необходимо.

Я никогда не писал каких-либо пользовательских аннотаций, поэтому, если это не имеет смысла, пожалуйста, дайте мне знать.

Спасибо, Phil

+0

Вы смотрели на Spring Security? Он обеспечивает основу для реализации того, что вы пытаетесь сделать. – jalynn2

+0

Пожалуйста, проверьте мой ответ http://stackoverflow.com/a/13420500/241986, но, честно говоря, я не помню подробностей через 3 года после :-) В этом ответе я оцениваю boolean variable btw –

ответ

1

Используйте пружинные аспекты, где вы можете использовать с срез точек аннотаций. Затем вы можете применить совет ни до, ни после этого, вокруг и т.д. Это то, что вы хотите

Вот пример @AspectJ pointcut for all methods of a class with specific annotation

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