[ https://issues.apache.org/jira/browse/ARIES-1316?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Christian Schneider resolved ARIES-1316. ---------------------------------------- Resolution: Fixed I was able to reproduce the problem. The reason is that a proxy is involved when calling the service. So the method m.getDeclaringClass is the interface not the bean impl. I solved the problem by giving the bean class to the interceptor using a constructor. Then I look up the interface method in the bean class and retrieve the runtime annotation from there. So now the annotations are only taken from the impl class. This is not ideal though. A user might want to define a security annotation also at an interface. So I think the correct way to handle this would be to parse the inheritance graph including implemented interfaces at parse time and store the effective annotation per method in a map. So at runtime we could simply do a fast lookup. I will create a separate issue for this. > Problem with intercepting authorizing annotations of a class declared as an > interface > ------------------------------------------------------------------------------------- > > Key: ARIES-1316 > URL: https://issues.apache.org/jira/browse/ARIES-1316 > Project: Aries > Issue Type: Bug > Components: Blueprint > Affects Versions: blueprint-authz-1.0.0 > Reporter: Pavel Alekhin > Assignee: Christian Schneider > Priority: Minor > Attachments: command.zip, properties.zip > > > Using of interface variable causes empty roles' list error {color:red}Method > call interface EchoService.echo denied. Roles allowed are []{color}, when > interface doesn't have method authorizing annotations, while implementing > class has. > Code example: > {code:title=EchoService.java|borderStyle=solid} > public interface EchoService { > //@RolesAllowed("admin") > public String echo(String message); > } > {code} > {code:title=SimpleEchoService.java|borderStyle=solid} > public class SimpleEchoService implements EchoService { > @RolesAllowed("admin") > @Override > public String echo(String message) { > return message; > } > } > {code} > {code:title=EchoCommand.java|borderStyle=solid} > @Command(scope = "kb", name = "echo") > public class EchoCommand extends OsgiCommandSupport { > private EchoService echoService; > public EchoService getEchoService() { > return echoService; > } > public void setEchoService(EchoService echoService) { > this.echoService = echoService; > } > @Argument(index = 0, name = "message", required = true, multiValued = > false) > private String message; > @Override > protected Object doExecute() throws Exception { > return echoService.echo(message); > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)