出现问题:
Java response.sendRedirect(url)转发后多带了端口导致无法访问
只要去掉1031后又能继续访问
问题背景
程序访问是通过gateway转发,gateway的端口是1032,域名解析的端口是1031然后通过nginx转发到1032,进而访问到gateway再转发到程序;
原因分析:
在开发本地环境时未出现问题,开发环境没有域名,没有nginx转发,127.0.0.1:1032直接访问,
所以产生问题的原因我感觉可能是生产环境网络情况比较复杂,使其转发混乱;1031是域名解析的端口,实际上访问程序的端口是1032,导致不匹配
解决方案
将response.sendRedirect(url)用绝对路径,写死前缀
//问卷地址
@Value("${dsfa.ks.urlQuestionnaire:https://xxx.cn}")
private String urlQuestionnaire;
@Pointcut("execution(* com.dsfa.platform.asq.external.info.controller.ApiAsqInfoController.enterAsq(..))")
public void point(){
}
@Around("point()")
public void enterAsq(ProceedingJoinPoint proceedingJoinPoint) throws IOException {
HttpServletResponse response = SpringContextHolder.response();
Object[] args = proceedingJoinPoint.getArgs();
HttpServletRequest request = (HttpServletRequest)args[0];
String type = (String)args[1];
String url = getUrl(request, type);
url = urlQuestionnaire+url;
// 带上域名前缀,把相对地址拼成绝对地址
System.out.println("跳转地址:url = " + url);
//跳转指定页面
response.sendRedirect(url);
}