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