我面临下面提到的代码的以下安全警告:
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”);
虽然我正在检查所有空参考条件,但它仍在给我。有什么建议吗?提前致谢
答案 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的有效状态。空应用程序和解析程序表明生命周期尚未正确初始化(或正在设置或拆除,在这种情况下,它不会处理请求)。如果你不能解决这个问题,你打算做什么?如果应用程序进入无效状态,通常应该让代码失败。