【问题标题】:Why java string method return null as string? [closed]为什么java字符串方法返回null作为字符串? [关闭]
【发布时间】:2020-09-24 05:28:09
【问题描述】:

这发生在使用 java 版本 1.8(java8) 的 spring-boot 应用程序中。在 java 14 的普通控制台应用程序中,它运行良好。

我有两个方法与由“OncePerRequestFilter”类扩展的 JWT 过滤类相关。

private String getJwt(HttpServletRequest request) {
    String authHeader = request.getHeader("Authorization");
    if (authHeader != null && authHeader.startsWith("Bearer ")) {
        return authHeader.replace("Bearer ", "");
    }

    return null;
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
        throws ServletException, IOException {
    try {
        String jwt = getJwt(request);
        if (!jwt.equals("null") && okenProvider.validateJwtToken(jwt)) {
            .....
            .....
        }
    } catch (Exception e) {
        ....
    }
    filterChain.doFilter(request, response);
}

预期的 jwt 变量值是令牌或空对象。用于检查以前使用过的jwt != null 并且总是正确的。当仅将其更改为 !jwt.equals("null") 时,它按预期工作。 据此,getJwt 方法总是返回一个 String 对象,即使它为空。这怎么解释?有没有办法返回一个空值而不是“空”?

【问题讨论】:

  • 无法重现:在 Java 1.8 和 Java 11 上测试,public static String returnnull() { return null; } 然后if (returnnull() != null) { System.out.println(1); } 没有输出。 String jwt真的是4个字母“null”的字符串吗?
  • @GenoChen,我已经更新了代码以便于理解。我在 java 14 中尝试过同样的方法,得到了和你一样的结果。这是预期的。但是在这里,出了点问题,我需要对此进行一些解释。我认为检查equals方法时可以找到您最后一个问题的答案。
  • 我忘记了一件事。如果String jwt 是真的 null,那么jwt.equals()会抛出一个NPE然后执行会转到catch分支。

标签: java spring-boot spring-security null return


【解决方案1】:

其实是在调试的时候出现了一些错误,导致了这个问题的产生。 对于登录/登录请求,前端应用程序已通过身份验证标头为Bearer null 的用户凭据。然后 getJwt 方法将“null”的切片字符串返回给另一个方法。它从未在return null 行执行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 2011-08-31
    • 1970-01-01
    • 2023-03-10
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多