Hi
I've solved the same problem using @Around annotation. It's a sample (probably it will be useful for someone):
Minstrel.java
...
Code:
@Around(value = "execution(* *.embarkOnQuest(..)) && this(knight)",
argNames = "joinPoint,knight")
public HolyGrail actionsOfMinstrel(ProceedingJoinPoint joinPoint, Knight knight)
throws Throwable{
SONG.info("Fa la la; Sir " + knight.getName() +
" is so brave!");
try{
HolyGrail result = (HolyGrail)joinPoint.proceed();
SONG.info("Tee-hee-he; Sir " + knight.getName() +
" did embark on a quest!");
return result;
} catch (AccessDeniedException ex){
SONG.error("The Sir " + knight.getName() +
" could not access to the quest! Caused by: " + ex.getMessage());
return null;
}
}
KnightOfTheRoundTable.java
...
Code:
public HolyGrail embarkOnQuest() {
System.out.println("embarking...");
return quest.embark();
}
HolyGrailQuest.java
...
Code:
@Secured("ROLE_ADMIN")
public HolyGrail embark() {
// do whatever it means to embark on a quest
return new HolyGrail();
}
Main.java
...
Code:
Knight knight1 = (Knight)factory.getBean("knight1");
Knight knight2 = (Knight)factory.getBean("knight2");
Knight knight3 = (Knight)factory.getBean("knight3");
AuthenticationManager am = (AuthenticationManager)factory.getBean("am");
authenticateKnight(knight1,am);
authenticateKnight(knight2,am);
authenticateKnight(knight3,am);
knight1.embarkOnQuest();
knight1.embarkOnQuest();
knight1.embarkOnQuest();
application-context.xml
...
Code:
<bean id="knight1" class="ru.sgu.Knight.Java.KnightOfTheRoundTable">
<constructor-arg value="arthur1"/>
</bean>
<bean id="knight2" class="ru.sgu.Knight.Java.KnightOfTheRoundTable">
<constructor-arg value="arthur2"/>
</bean>
<bean id="knight3" class="ru.sgu.Knight.Java.KnightOfTheRoundTable">
<constructor-arg value="arthur3"/>
</bean>
<security:global-method-security secured-annotations="enabled" />
<security:authentication-manager alias="am">
<security:authentication-provider>
<security:user-service>
<security:user name="arthur1" password="arthur1" authorities="ROLE_USER, ROLE_ADMIN" />
<security:user name="arthur2" password="arthur2" authorities="ROLE_USER" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>