缺少对Null的检查

时间:2011-01-12 11:07:26

标签: java jsf

我面临下面提到的代码的以下安全警告:

 if (null != FacesContext.getCurrentInstance()) {

            FacesContext context = FacesContext.getCurrentInstance();

            if ((null != context.getApplication())
                    && (null != context.getApplication().getVariableResolver())) {

                if (null != context.getApplication().getVariableResolver()
                        .resolveVariable(context, "userBean")) {

                    Object requestObject = context.getApplication()
                            .getVariableResolver().resolveVariable(context,
                                    "userBean");

                    String pRange = ((UserBean) requestObject)
                            .getPageSize_REM();

                    page_range = Integer.parseInt(pRange);

                }

            }
        }

我在强化报告中收到的警告是:

  
    

摘要:GrantAccessBackingBean.java中的getList()方法可以     在线上取消引用空指针     2357因为它不检查     resolveVariable()的返回值,     可能会返回null。下沉:     GrantAccessBackingBean.java:2353     requestObject = resolveVariable(...):     VariableResolver.resolveVariable可以     返回NULL()2351     .resolveVariable(context,“userBean”))     {2352对象requestObject =     context.getApplication()2353     .getVariableResolver()。resolveVariable(上下文,     2354“userBean”);

  

虽然我正在检查所有空参考条件,但它仍在给我。有什么建议吗?提前致谢

2 个答案:

答案 0 :(得分:2)

我的猜测是报告无法确定

if (null != context.getApplication().getVariableResolver()
                        .resolveVariable(context, "userBean")) 

Object requestObject = context.getApplication()
                              .getVariableResolver()
                              .resolveVariable(context, "userBean");

评价相同。 为什么不将代码更改为

Object requestObject = context.getApplication()
                              .getVariableResolver()
                              .resolveVariable(context, "userBean");
if (requestObject != null)
{
}

看看是否有帮助。

(如果没有,它至少会消除每次空检查时出现的重复调用)

答案 1 :(得分:0)

没有足够的信息来判断您的静态检查工具是否提供了良好的建议。

如果"userBean"是托管bean,则空检查将是多余的 - 它将由解析器实例化。但是,最好是利用JSF的依赖注入,而不是以这种方式进行手动查找。

if(null != FacesContext.getCurrentInstance()) {
        FacesContext context = FacesContext.getCurrentInstance();
        if ((null != context.getApplication())
                && (null != context.getApplication().getVariableResolver())) {

如果要在HTTP请求期间调用此代码,则所有这些空检查都是垃圾。没有FacesContext.getCurrentInstance()返回null的有效状态。空应用程序和解析程序表明生命周期尚未正确初始化(或正在设置或拆除,在这种情况下,它不会处理请求)。如果你不能解决这个问题,你打算做什么?如果应用程序进入无效状态,通常应该让代码失败。