[jboss-jira] [JBoss JIRA] Commented: (EJBTHREE-615) NPE in Embedded Jboss when getCallerPrincipal method on SessionContext

asdfasdf ddd (JIRA) jira-events at lists.jboss.org
Wed Dec 24 00:06:56 EST 2008


    [ https://jira.jboss.org/jira/browse/EJBTHREE-615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12444075#action_12444075 ] 

asdfasdf ddd commented on EJBTHREE-615:
---------------------------------------

dear my friends , I have been counter with the same problem for 2 days, after learning the security constract of ejb3 on jboss4, I finally find a esay way to solve this problem .

add 
props.setProperty(Context.SECURITY_PRINCIPAL, "myuserid");
to your client program ... 

then in the bean class
ctx.getCallerPrincipal(); 
will return  "myuserid" which the client program determined above.

my client program is like this ..

                                           Properties props=new Properties();
		props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.security.jndi.JndiLoginInitialContextFactory");
		props.setProperty(Context.PROVIDER_URL, "localhost:1099");
		props.setProperty(Context.SECURITY_PRINCIPAL, "myuserid");//here!!!!!!!!!!!
		InitialContext ctx=new InitialContext(props);
		saha ss=(saha)ctx.lookup("sahabean/remote");
		ss.sayhi();


my bean class is like this ..

@Stateful
@Remote({saha.class})
public class sahabean implements saha {
	
	@Resource SessionContext ctx;
	
	public String sayhi() {
		System.out.println(ctx.getCallerPrincipal());//no exceptions now..
		return "success";
	}

}


remote interface "saha" is like this ..

public interface saha {
	public String sayhi();
}




after deployed sahabean on jboss-4.2.3.GA-jdk6 and run client program, you can see the output "myuserid" on your jboss command console.

i am confident that this code can normally run on jboss5 too. 
best regards ..


> NPE in Embedded Jboss when getCallerPrincipal method on SessionContext
> ----------------------------------------------------------------------
>
>                 Key: EJBTHREE-615
>                 URL: https://jira.jboss.org/jira/browse/EJBTHREE-615
>             Project: EJB 3.0
>          Issue Type: Bug
>    Affects Versions: EJB 3.0 RC8 - FD
>            Reporter: Nicolai ?dum
>            Assignee: Carlo de Wolf
>         Attachments: BugReportInterceptor.java
>
>
> The bug is pretty easy to create.
> Modify the CalculaterBean in the security example that is distributed with JBoss embedded like this
> import javax.annotation.Resource;
> import java.security.Principal;
> import javax.ejb.SessionContext;
> ..
> public class CalculatorBean implements Calculator
> {
> @Resource SessionContext ctx;	
> @RolesAllowed({"student"})
> public int subtract(int x, int y)
> {
> Principal caller = ctx.getCallerPrincipal(); //Nullpointer
> return x - y;
> }
> The exception
> full stacktrace: 
> javax.ejb.EJBException: java.lang.NullPointerException 
> at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:69) 
> at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83) 
> at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:197) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:62) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.aspects.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:167) 
> at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptor.invoke(RoleBasedAuthorizationInterceptor.java:100) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.aspects.security.AuthenticationInterceptor.invoke(AuthenticationInterceptor.java:78) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:47) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(AsynchronousInterceptor.java:106) 
> at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101) 
> at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:181) 
> at org.jboss.ejb3.stateless.StatelessLocalProxy.invoke(StatelessLocalProxy.java:79) 
> at $Proxy15.getSubscriberDetails(Unknown Source) 
> Another user has reported that is is possible to get the principal from org.jboss.security.SecurityAssociation.getPrincipal(), but not from the Session Context.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jboss-jira mailing list