[jboss-user] [JBoss Seam] - Security context propagation between Seam EJB components and
eyrignou
do-not-reply at jboss.com
Tue Aug 14 12:52:49 EDT 2007
I use Seam 1.2.1GA in my application, under JBoss 4.0.5GA; the presentation layer is made of Session EJBs which are Seam components, and the service and persistance layers are made of "standard" EJBs (ie. not Seam components).
Therefore I need a way to communicate the security context from the Seam components to the "standard" EJBs.
I use the Seam authentication and authorization mecanisms, which work very fine... But only in Seam components.
The user gets authenticated thanks to an "authenticator" JavaBean-Seam Component which I wrote after from the Seam Documentation (I have also put in place all the configuration indicated in the Seam Documentation http://docs.jboss.org/seam/1.2.1.GA/reference/en/html/security.html):
| public boolean authenticate() {
|
| boolean result = false;
|
| SylveaUser user = getSecurityDAO().getUser(Identity.instance().getUsername());
|
| if ( user != null ) {
| Identity.instance().addRole(user.getProfile().getName());
|
| if ( Encryption.getInstance().equals(user.getPassword(), Identity.instance().getPassword())) {
| result = true;
| }
| }
| return result;
| }
|
In the components.xml, I use the "pure" Seam authentication:
| <security:identity authenticate-method="#{authenticator.authenticate}"/>
|
In my Seam-EJBs components, everything works fine when I use the Seam API, ie. Identity.instance( ).*
But if I try to use the JEE API, I get an exception: "java.lang.IllegalStateException: No valid security context for the caller identity"
Here is an example of my code:
| @Stateful
| @Scope(ScopeType.CONVERSATION)
| @Name("myAction")
| public class MyActionImpl extends MyAction {
|
| @Resource
| private SessionContext context;
|
| @Factory(value="intermediaireList", scope=ScopeType.EVENT)
| public void findIntermediaires() {
| boolean loggedIn = Identity.instance().isLoggedIn(); // works fine
| Principal principal = context.getCallerPrincipal(); // IllegalArgumentException
| String name = principal.getName();
| ...
| }
| }
|
When I try to use the JEE API in my "standard" EJBs if the service and persistance layers, I get the same IllegalArgumentException. Does anyone have an idea ?
Thanks in advance,
Marc.
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4074106#4074106
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4074106
More information about the jboss-user
mailing list