Les,
I'm curious - why don't our method interceptors implement the AOP
alliance interfaces? This is a pretty standard thing, used by Spring,
Guice, etc. Either way, seems like the AOP Alliance class is misplaced
in the Spring module - since AOP Alliance is not Spring-specific. I
think this should all be moved into core.
Jeremy
On Sep 22, 2008, at 8:48 AM, Les Hazlewood wrote:
Cool!
Could you give us a summary of everything that is required to get up
and running in Guice? I can add this to a tutorial. If you needed to
write any code also, that'd be great to have. :)
Thanks!
Les
On Mon, Sep 22, 2008 at 8:41 AM, Animesh Jain <[EMAIL PROTECTED]>
wrote:
Umm.. i made a very stupid mistake which I just found. All's
working well
now. Sorry for bothering :P
So Les it seems its pretty easy to integrate annotation with Guice,
just one
lie config needed.
Cheers
Animesh
On Mon, Sep 22, 2008 at 6:01 PM, Animesh Jain
<[EMAIL PROTECTED]> wrote:
Although it appears that the role check is working. Because the
annotated
method is not executing when the roles do not match. But no error
is being
thrown and the debugger is not reaching the
AopAllianceAnnotationsAuthorizingMethodInterceptor class. I've
even put a
System.out there and it only prints when the roles match, so its
not a
debugger problem.
I'm lost.
Animesh
On Mon, Sep 22, 2008 at 5:36 PM, Animesh Jain <[EMAIL PROTECTED]>
wrote:
Yes Jeremy, you're right. It works with a slight modification
(but.. not
fully, which I'll explain below) -
bindInterceptor(Matchers.any(),
Matchers.annotatedWith(RequiresRoles.class), new
AopAllianceAnnotationsAuthorizingMethodInterceptor());
Basically Guice supports the AOP Alliance api, so
RoleAnnotationMethodInterceptor and
PermissionAnnotationMethodInterceptor
cannot be bound directly as they are not implementing the
alliance api's
method interceptor. But I think Les has written
AopAllianceAnnotationsAuthorizingMethodInterceptor for this very
purpose.
Now lets come to the problem.. when I login with a user who has
a role
(lets say "person") and call a method with the annotation
RequiresRole("person"), then the
AopAllianceAnnotationsAuthorizingMethodInterceptor is getting
called and the
call is infact going all the way upto
RoleAnnotationMethodInterceptor as
expected. But if the role is something else then it is supposed
to throw a
runtime error, which is not happening, the control is not even
coming to
AopAllianceAnnotationsAuthorizingMethodInterceptor. This is very
strange.
I'm just using Idea's debugger to see where the calls are going.
So basically when all's well i.e. the subject role matches the
annotation
role, then aop seems to be working. But if the roles are
different then aop
doesn't seem to be working at all. No errors. Not even getting
called.
Any clue on what could be happening?
Kind regards
Animesh
On Fri, Sep 19, 2008 at 8:14 PM, Jeremy Haile
<[EMAIL PROTECTED]> wrote:
Animesh,
I only have light experience with Guice, but I know it supports
AOP
Alliance method interceptors, just like Spring uses - and just
like
JSecurity provides.
I think you'd simply need to bind those method interceptors as
appropriate. I haven't tried it yet, but I imagine something
like the
following code would work. Could you please try it out and let
me know if
it works?
binder.bindInterceptor( any(),
annotatedWith(RequiresRoles.class), new
RoleAnnotationMethodInterceptor());
binder.bindInterceptor( any(),
annotatedWith(RequiresPermissions.class), new
PermissionAnnotationMethodInterceptor());
Jeremy
On Sep 18, 2008, at 1:20 PM, Animesh Jain wrote:
Well, can't really do the AOP part in Spring and the rest in
Guice, its
just making things unnecessarily intertwined. So I think I'll
read up on
what capabilities Guice has for AOP and try and write a Guice
implementation
for the RequiresRoles and RequiresPermissions tags. Any pointers
will be
appreciated on what I should try to do (on a higher level),
because I've
never tried my hand at AOP before this. Guice does have method
interceptors
I believe and that should be enough here, isn't it?
Animesh
On Thu, Sep 18, 2008 at 6:54 PM, Animesh Jain <[EMAIL PROTECTED]
>
wrote:
Aah! This helps a lot. So I hope I can use this without using
Spring
for the Jsecurity Realm injection - for that I'm using Guice.
Anyway.. I'll
try this asap and update on the results. I think Jsecurity
definitely needs
some more documentation in a few areas. I'll try and write down
a few
tutorials when I find time.
Animesh
On Thu, Sep 18, 2008 at 6:45 PM, Jeremy Haile
<[EMAIL PROTECTED]>
wrote:
Animesh,
Have you added these bean definitions to Spring?
<bean id="lifecycleBeanPostProcessor"
class="org.jsecurity.spring.LifecycleBeanPostProcessor"/>
<bean
class
=
"org
.springframework
.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
depends-on="lifecycleBeanPostProcessor"/>
<bean
class
=
"org
.jsecurity
.spring
.security.interceptor.AuthorizationAttributeSourceAdvisor">
<property name="securityManager"
ref="securityManager"/>
</bean>
These are declared in webroot/WEB-INF/applicationContext.xml
in the
spring sample application along with some additional
documentation.
The first bean helps initialize and destroy JSecurity related
beans.
The DefaultAdvisorAutoProxyCreator is required to enable
Spring's
auto-proxying of beans based on annotations. The last bean adds
support
for auto-proxying method calls to beans that use JSecurity
annotations.
I hope this helps - let me know if you have more questions!
Jeremy
On Thu, 18 Sep 2008 18:30:40 +0530, "Animesh Jain"
<[EMAIL PROTECTED]> said:
I guess I'm missing setting it up with some AOP framework is
it?
On Wed, Sep 17, 2008 at 11:25 PM, Animesh Jain
<[EMAIL PROTECTED]>
wrote:
Hi
As I understood from the documentation, a checked exception
will
be thrown
if for eg. a user does not have the role specified by
@RequiresRoles. But
nothing's happening, the method gets executed regardless. In
my
particular
case I want the method to fire only when a user of a
particular
role is
logged in, but that method is executing even if I try after
logout. What am
I missing :|
Animesh