On Oct 24, 2008, at 3:11 PM, jayess wrote:
Hi. I'm doing a little investigation to see if we can use Spring
Security for
the web tier and still have have the EJBs secured by the container
(as I
understand Spring Security can't be used for EJBs - am I wrong?). The
customer wants to use Spring Security. And this is just
investigative work
to find possible approaches.
End result is that I want to be able to secure the EJBs using
annotations.
I have a EAR file deployed to Geronimo (Jetty). In the EAR, I have a
simple
WAR file that is secured by Spring Security (i.e. all web resources
are
protected properly). I've enabled authentication/authorization at
this level
and it works fine. For the EJBs, I've added @RolesAllowed
annotations to my
EJBs and I've enabled EJB security by adding an empty <security/>
tag in the
geronimo-application.xml. Now my EJBS are secure (I get a
"Unauthorized
Access by Principal Denied" when I try to access them).
Now I need to tie the two securities together. I am thinking that I
could
create a servlet filter that "hooks into" geronimo security as
follows:
:
Subject subject = new Subject();
subject.getPrincipals().add(...);
ContextManager.setCurrentCallers(subject,subject)
That's close to what should work....
First, if you can get the principals I imagine you can get the Subject
out of Spring security and use it rather than constructing another one.
Next, for geronimo's JACC Implementation to work you have to register
the Subject so we can pre-compute the AccessControlContext for the
subject.
Finally, the ContextManager.setCurrentCallers(subject,subject) is
correct. So I think something like this ought to work:
Subject subject = extractSubjectFromTheDeathGripOfSpring();
ContextManager.registerSubject(subject);
ContextManager.setCurrentCallers(subject,subject);
If Spring successfully hides the subject but lets you see the
principals then constructing a Subject as you do above ought to work
too.
Hope this helps
david jencks
:
However I am having problems. When I try to access a secured EJB
(after
authentication in Spring), I get the following error:
java.lang.NullPointerException
at
org
.apache
.geronimo
.security.ContextManager.getCurrentContext(ContextManager.java:164)
at
org
.apache
.geronimo
.openejb
.GeronimoSecurityService
.isCallerAuthorized(GeronimoSecurityService.java:101)
at
org
.apache
.openejb
.core.stateless.StatelessContainer.invoke(StatelessContainer.java:142)
at
org
.apache
.openejb
.core
.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:
217)
at
org
.apache
.openejb
.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:77)
at
org
.apache
.openejb
.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:321)
at
org
.apache
.openejb
.util
.proxy.Jdk13InvocationHandler.invoke(Jdk13InvocationHandler.java:49)
So my questions:
1. Is there a way to hook into Geronimo security? If so how do I
create the
Subject properly so that Geronimo can use it?
2. Given that we want to use "Spring Security" for the web tier, but
want
our EJBs secured ... is there a better approach?
I'm new to security in general and any advice would be greatly
welcomed.
Also, to reiterate, we have not decided to use Spring Security but
need to
investigate if it's even doable - given the fact we are deploying to
Geronimo and do want our EJBs secured by annotations.
Thanks so much!!!!
--
View this message in context:
http://www.nabble.com/Spring-Security---securing-EJBs-in-Geronimo-tp20158641s134p20158641.html
Sent from the Apache Geronimo - Users mailing list archive at
Nabble.com.