Thanks a lot for your reply Andy,

One last point: does it make sense to write the following?

*My pointcut:*

public pointcut advertisementBelongsToMemberControllerCheck(*, long
advertisementId, *, Member member)
        : execution(@AdvertisementExistsAndBelongsToMemberCheck * * (..))
        && args(*,advertisementId, *,  member,..);

*My advice:*

before(*, long advertisementId, *, Member member) :
advertisementBelongsToMemberControllerCheck(*,advertisementId, *,
member) {
        if 
(!advertisementService.advertisementExistsAndBelongsToMember(advertisementId,
member)) {
            throw new AccessDeniedException("Advertisement does not
belong to member!");
        }
    }

Regards,

J.



2013/9/18 Andy Clement <[email protected]>

> args() can include '*' and '..' - this gives you a little flexibility,
> maybe not quite as much as you'd like, but some.
>
> args(familyAdvertisementInfo,advertisementId, model,  member);
>
> could be written as:
>
> args(*,advertisementId,*,member,..)
>
> meaning you want the 2nd and 4th parameter and you don't care about 1 or 2
> or any after the 4th.  There have been discussions over the users about
> using .. in multiple places but we don't support that at the moment.
>
> Andy
>
>
> On 18 September 2013 04:25, Julien Martin <[email protected]> wrote:
>
>> Hello,
>>
>> I use *AspectJ* in order *to check whether an object does belong to the
>> current user*. The advised method is actually a Spring MVC controller
>> method. I use an annotation placed on that controller method in order to
>> apply the crosscutting security advice.
>>
>> The issue I have is that the controller method has quite a few arguments.
>> I would like to avoid mentioning all arguments in the aspectJ source
>> because those can change (argument name, type, etc.) but I still have to
>> collect the pointcut context.
>>
>> *My pointcut:*
>>
>> public pointcut 
>> advertisementBelongsToMemberControllerCheck(FamilyAdvertisementInfo 
>> familyAdvertisementInfo, long advertisementId, Model model, Member member)
>>         : execution(@AdvertisementExistsAndBelongsToMemberCheck * * (..))
>>         && args(familyAdvertisementInfo,advertisementId, model,  member);
>>
>>  *My advice:*
>>
>> before(FamilyAdvertisementInfo familyAdvertisementInfo, long 
>> advertisementId, Model model, Member member) : 
>> advertisementBelongsToMemberControllerCheck(familyAdvertisementInfo,advertisementId,
>>  model,  member) {
>>         if 
>> (!advertisementService.advertisementExistsAndBelongsToMember(advertisementId,
>>  member)) {
>>             throw new AccessDeniedException("Advertisement does not belong 
>> to member!");
>>         }
>>     }
>>
>> *The annotation:*
>>
>> @Retention(RetentionPolicy.RUNTIME)public @interface 
>> AdvertisementExistsAndBelongsToMemberCheck {
>> }
>>
>> *And finally, the advised controller method:*
>>
>> @RequestMapping(value = "/family/edit/{advertisementId}", method = 
>> RequestMethod.GET, produces = 
>> "text/html")@AdvertisementExistsAndBelongsToMemberCheckpublic String 
>> editFamilyAdvertisementForm(@ModelAttribute FamilyAdvertisementInfo 
>> familyAdvertisementInfo, @PathVariable long advertisementId, Model model, 
>> @CurrentMember Member member/* the currently logged in user */) {
>>         FamilyAdvertisement advertisement = 
>> advertisementService.findFamilyAdvertisement(advertisementId);
>>         familyAdvertisementInfo.setFamilyAdvertisement(advertisement);
>>         populateFamilyAdvertisementModel(model, familyAdvertisementInfo, 
>> member);
>>         return "advertisement/family/edit";
>>     }
>>
>> *To sum up, of the N arguments present in the method, I only need to use two 
>> (member and advertisementId). How can I avoid mentioning the N arguments?*
>>
>> Thanks in advance,
>>
>> J.
>>
>>
>> _______________________________________________
>> aspectj-users mailing list
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
> _______________________________________________
> aspectj-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to