0

我正在开发使用 JBoss seam 开发的 Web 应用程序的前端。我遇到了NullPointerException用户登录,但我不知道它是如何发生的。这是基于日志的摘要。

当用户尝试登录时,LoginBean 中的 authenticate 方法被执行

    public class LoginBean{
            //both from org.jboss.seam.security package
            @In
            private Credentials credentials

            @In
            private Identity identity

            public boolean authenticate(){
                    ...

                    //false
                    logger.info(identity.getCredential null? == " + identity.getCredential==null);

                    //this returns true
                    result = webAuthentication.login(credential.getUsername(), credential.getPassword());

                    return result;
            }
    }

我仍然可以在此代码中访问身份对象的凭据属性。执行身份验证后,日志显示执行了另一个类的方法。

    public class LoginControllerBean{
            @In 
            private Identity identity; //org.jboss.seam.security

            @Observer("org.jboss.seam.security.loginSuccessful")
            @Begin(join = true)
            public void updateSessionUserStats(){
                    //i can still see this in the log
                    logger.info("Login successful. updating sessionUserInfo....");

                    //throws NullPointerException  
                    logger.info("check identity.getCredential if null == " + identity.getCredential());


                    sessionUser = new SessionUser();
                    //if I remove the log above this call will throw NullPointerException                        
                    sessionUser.setUsername(identity.getCredentials().getUsername());
            }

    }

我假设登录成功,因为带有@Observer(...loginSuccessful)注释的方法是在身份验证后立即执行的。

第一类和第二类中的两个身份对象都是由@In annotation. 为什么identity.getCredentials() throws nullPointerException在第二个代码上而在第一个代码上可以?dentity.getCredentials() throwing nullPointerException?如果我不能提供有关问题的更多详细信息,可能是什么原因导致我很抱歉。我只能访问前端代码。谢谢。

4

1 回答 1

0

如果您想确保获得非空使用

  @In(create=true)
    private Identity identity
于 2013-09-05T13:55:49.397 回答