[ 
https://issues.apache.org/jira/browse/ARIES-1316?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14622544#comment-14622544
 ] 

Pavel Alekhin edited comment on ARIES-1316 at 7/10/15 4:30 PM:
---------------------------------------------------------------

It's injected by blueprint config.

<reference id="echoService" 
interface="biz.lorien.umrp.kb.properties.EchoService" />
<shell:command>
    <shell:action class="biz.lorien.umrp.kb.command.EchoCommand">
        <shell:property name="echoService" ref="echoService" />        
    </shell:action>
</shell:command>

As I understood, exploring the code, the problem is that when bundle starts 
with <authz:enable> in blueprint, AnnotationParser looks for security 
annotations in a class (SimpleEchoService in our case):

private boolean isSecured(Class<?> clazz) {
    if (clazz == Object.class) {
        return false;
    }
    if (clazz.getAnnotation(RolesAllowed.class) != null || 
clazz.getAnnotation(DenyAll.class) != null) {
        return true;
    }
    for (Method m : clazz.getMethods()) {
        if (m.getAnnotation(RolesAllowed.class) != null) {
            return true;
        }
        if (m.getAnnotation(DenyAll.class) != null) {
            return true;
        }
     }
    return false;
}


But later then in runtime AuthorizationInterceptor looks for security 
annotations in an interface methods:

 public Object preCall(ComponentMetadata cm, Method m, Object... parameters) 
throws Throwable {
        Annotation ann = new 
SecurityAnotationParser().getEffectiveAnnotation(m);
        ...
 }

Here it gets "Method m" from the interface.


was (Author: kuvalda):
It's injected by blueprint config.

<reference id="echoService" 
interface="biz.lorien.umrp.kb.properties.EchoService" />
<shell:command>
<br>    <shell:action class="biz.lorien.umrp.kb.command.EchoCommand">
        <shell:property name="echoService" ref="echoService" />        
    </shell:action>
</shell:command>

As I understood, exploring the code, the problem is that when bundle starts 
with <authz:enable> in blueprint, AnnotationParser looks for security 
annotations in a class (SimpleEchoService in our case):

private boolean isSecured(Class<?> clazz) {
    if (clazz == Object.class) {
        return false;
    }
    if (clazz.getAnnotation(RolesAllowed.class) != null || 
clazz.getAnnotation(DenyAll.class) != null) {
        return true;
    }
    for (Method m : clazz.getMethods()) {
        if (m.getAnnotation(RolesAllowed.class) != null) {
            return true;
        }
        if (m.getAnnotation(DenyAll.class) != null) {
            return true;
        }
     }
    return false;
}


But later then in runtime AuthorizationInterceptor looks for security 
annotations in an interface methods:

 public Object preCall(ComponentMetadata cm, Method m, Object... parameters) 
throws Throwable {
        Annotation ann = new 
SecurityAnotationParser().getEffectiveAnnotation(m);
        ...
 }

Here it gets "Method m" from the interface.

> 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
>
> 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)

Reply via email to