Java相关项目问题排查集合

一、后端相关问题

1.1、重定向的次数过多ERR TOO MANY REDIRECTS

1.1.1、背景:

​ SpringBoot项目在麒麟Linux系统部署,访问首页提示重定向的次数过多,由于是内网系统,所以整个过程都是通过和实施人员沟通进行尝试解决。

该网页无法正常运作
xxx.xxx.xxx.192 将您重定向的次数过多,
尝试删除您的 Cookie.
ERR TOO MANY REDIRECTS

1.1.2、排查问题思路

1、排除项目的问题

作为开发人员,第一步先排除是项目的问题,由于是其他项目,没有接触过,先拉取一份项目代码,本地debug模式启动。结果发现正常。

2、网上查找相关文章,大致方向为:

(1)前端代码问题:

这个URL上再次设置重定向,使其指向原来的页面。这样,浏览器就会陷入一个无限循环的重定向中。

查看了一下访问页面地址,查看代码,发现通过get请求接口方式,获取相关人员信息之后,返回前端ModelAndView。

(2)后端接口问题:
  • 代码排查:检查所有重定向代码(如redirect:/path),确保终止条件正确,避免循环
// 错误示例:重定向到自身路径
@GetMapping("/path")
public String redirect() {
    return "redirect:/path";  // 导致无限循环
}
(3)Nginx配置错误,导致循环跳转。
  • 反向代理(如 Nginx)的 proxy_pass 配置错误,导致路径重复拼接。
(4)安全框架(如 Spring Security)的配置错误,导致权限检查循环。
  • 现象:身份验证逻辑导致登录后无限重定向。
  • 示例
    • 用户登录后,Session 未正确标记为已认证,每次请求都被重定向到登录页面。
    • 安全框架(如 Spring Security)的配置错误,导致权限检查循环。

解决方式:

  • 步骤

    1. 检查安全框架配置
      例如 Spring Security 的配置文件中,确保登录页、白名单路径正确:

      @Configuration
      public class SecurityConfig extends WebSecurityConfigurerAdapter {
          @Override
          protected void configure(HttpSecurity http) throws Exception {
              http
                  .authorizeRequests()
                      .antMatchers("/login", "/public/**").permitAll()
                      .anyRequest().authenticated()
                      .and()
                  .formLogin()
                      .loginPage("/login")
                      .defaultSuccessUrl("/home"); // 确保登录成功跳转路径正确
          }
      }
      
    2. 检查 Session 状态
      登录成功后,确认 Session 中是否存储了正确的用户认证信息(如 SecurityContextHolder)。

(5). 过滤器(Filter)或拦截器(Interceptor)逻辑错误
  • 现象:自定义的过滤器/拦截器未正确处理请求。
  • 示例
    • 过滤器中对未登录用户重定向到登录页,但登录页本身也被拦截,导致循环。

解决方式:

  • 步骤

    1. 临时禁用自定义过滤器
      web.xml 或配置类中注释掉自定义过滤器,逐步排查。

    2. 添加调试日志
      在过滤器中打印请求路径和重定向目标,观察是否触发循环:

      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
          HttpServletRequest httpRequest = (HttpServletRequest) request;
          String path = httpRequest.getRequestURI();
          System.out.println("Filter processing path: " + path);
          // ... 其他逻辑
      }
      
(6) SSL/TLS 配置问题
  • 现象:HTTP 强制跳转 HTTPS 时配置错误。

  • 示例

    • 服务器(如 Nginx/Tomcat)配置了 HTTPS 强制跳转,但应用内部也通过代码强制跳转 HTTPS。
    • 负载均衡器(如 AWS ELB)未正确传递协议头,导致应用误判请求协议。

    解决方式:

  1. 检查 SSL/TLS 配置
  • 步骤
    1. 禁用应用内的 HTTPS 强制跳转
      检查代码中是否有类似 response.sendRedirect("https://...") 的逻辑,暂时注释。
    2. 确保服务器层统一处理 HTTPS
      在反向代理(如 Nginx)或负载均衡器中配置 HTTPS 跳转,而不是在应用层重复配置。
    3. 验证协议头传递
      如果使用反向代理,确保传递 X-Forwarded-Proto 头部:
# Nginx 配置示例
location / {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Forwarded-Proto $scheme;
}
(7)清除浏览器Cookie

3、本地启动没问题,说明代码没问题。考虑配置和环境。

4、和实施人员沟通之后,要了SpringBoot配置文件、Nginx配置文件,Redis配置文件。关键配置看不出来什么问题。算了先绕过Nginx直接访问系统试试,仍然这样。说明系统自身有问题,可是上一步已经排除代码问题了。

5、让实施清除Cookie,换浏览器、换电脑重试仍然无效。

6、实施人员说系统为麒麟Linux系统,算了。还是先排除好排除的吧。

7、一顿搜索还是没有有效解决方式,最后还是回归本质看日志吧。

8、看了日志,才发现Redis密码认证错误。这个问题会引起重定向问题吗??不知道,先解决这个问题看看。

9、重新设置redis密码,部署系统,实施反馈可以访问了。

1.1.3、问题原因

通过日志排查出:redis认证问题,密码错误。

posted @ 2025-04-16 17:07  大沐沐沐  阅读(24)  评论(0)    收藏  举报