You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击提交按钮后URL变为/login/login的原因排查(附角色认证代码)

为什么点击提交按钮后URL变成/login/login?

这种情况几乎都是相对路径的拼接问题导致的,我来帮你拆解几个最常见的原因和解决办法:

1. 表单的action属性用了相对路径

假设你的登录页面是通过/login路径访问的(比如LoginServlet映射到/login),如果表单的action写的是:

<form action="login" method="post">

那浏览器会把这个相对路径拼在当前页面的路径后面,也就是/login + login = /login/login。

解决办法:给action加上根路径前缀,用绝对路径:

<form action="${pageContext.request.contextPath}/login" method="post">

或者直接用斜杠开头的绝对路径(注意如果你的应用有上下文路径,最好用EL表达式获取,避免硬编码):

<form action="/your-app-context/login" method="post">

2. 过滤器里的重定向用了相对路径

看你贴的过滤器代码,应该是在检查session未登录时会重定向到登录页面吧?如果你的重定向代码是这样的:

response.sendRedirect("login");

那同样会出现相对路径拼接的问题——如果当前请求的路径是/some-page,重定向后会变成/some-page/login,但如果是从/login路径触发的过滤,就会变成/login/login。

解决办法:重定向时用绝对路径,加上上下文路径:

String contextPath = request.getContextPath();
response.sendRedirect(contextPath + "/login");

这样不管当前在哪个路径,都会跳转到正确的/your-app-context/login。

3. Servlet映射路径的潜在冲突

如果你的LoginServlet的映射是@WebServlet("/login"),同时你还有一个名为login的文件夹(里面放了静态登录页面),也可能导致路径解析混乱,但这种情况比较少见,优先检查前两个原因。

最后,你可以先排查表单的action路径,这是最常见的触发点,然后再看过滤器里的重定向逻辑,应该就能解决问题啦!

内容的提问来源于stack exchange,提问作者Mohendra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:25:50