On 2010/04/26, at 14:11, Jan Goyvaerts wrote:
Hey Luis,
That will work for sure, but everything that has to be implemented
explicitly is liable to bugs. And this is what you don't want with
security related systems. :-)
It's probably what Viktor says that is best : OAP or some kind of
annotation processor to include a check prior to calling this method.
Well, at least now I know this is "normal" behavior. Thanks a lot
guys !!! :-)
Jan
That's definitely better. If you do go the AOP route, make sure that
whatever AOP you use actually ends up doing compile-time or load-time
weaving. Spring AOP, for example, defaults to a proxy-based
implementation.
On Mon, Apr 26, 2010 at 14:46, Luís Miranda
<[email protected]> wrote:
Jan,
On 2010/04/26, at 12:56, Jan Goyvaerts wrote:
On Mon, Apr 26, 2010 at 13:47, Viktor Klang
<[email protected]> wrote:
Well... I am kind of expecting it does *something* to enforce its
own security model. :-)
That's why I'm wondering why it doesn't intercept internal method
calls (due to bugs for instance) while it does intercept the
interface calls.
Should I conclude this is the expected, as designed, behavior ? My
question really is just that: While counterintuitive (for me) is
this the way it is meant to work: only the remote method calls are
secured. Not the local/internal/... ones. Right ?
I think this behaviour is mostly a side-effect of how the app
servers generally implement security (by using a proxy/interceptor
chain). Generally a proxy is not able to intercept self-invocation.
I've had a quick glance at the EJB specification and it isn't
terribly specific about what is the expected behaviour in this case.
From section 17.1 of the EJB 3.0 spec:
At runtime, a client will be allowed to invoke a business method
only if the principal associated with the client call has been
assigned by the Deployer to have at least one security role that is
allowed to invoke the business method or if the Bean Provider or
Application Assembler has specified that security authorization is
not to be checked for the method (i.e., that all roles, including
any unauthenticated roles, are permitted). See Section 17.3.2.
The language used ("a client will be allowed...") suggests that the
self-invocation case is not covered within the spec. Since it's not
in the spec, it's bound to be container-dependent as well, which may
or may not be a problem for you.
I would suggest that you add a programmatic security check at the
start of the relevant methods, using the method
isCallerInRole(String) from the interface javax.ejb.EJBContext. It's
ugly, but guaranteed to work. :)
Luís Miranda
--
You received this message because you are subscribed to the Google
Groups "The Java Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected]
.
For more options, visit this group at http://groups.google.com/group/javaposse?hl=en
.
--
You received this message because you are subscribed to the Google
Groups "The Java Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to [email protected]
.
For more options, visit this group at http://groups.google.com/group/javaposse?hl=en
.
--
You received this message because you are subscribed to the Google Groups "The Java
Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/javaposse?hl=en.