Servlet过滤器登录重定向无限循环[重复]
Posted
技术标签:
【中文标题】Servlet过滤器登录重定向无限循环[重复]【英文标题】:Servlet Filter login redirection infinite loop [duplicate] 【发布时间】:2016-05-20 13:34:18 【问题描述】:我正在试验 servlet 过滤器。我创建了两个 JSP 页面 - Home 和 Login。 我想创建以下流程:
当在会话中访问没有凭据的主页时 -> 重定向到登录页面。
当输入正确的凭据时(将它们与硬编码的常量进行比较)重定向到主页。
输入不正确的凭据时 - 再次重定向到登录页面。
到目前为止,这是我的代码,由于空检查,我在直接进入主页时遇到了无限循环的问题。在这种情况下,您能给我指明正确的方法吗?
package bg.filter.test;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebFilter ("/pages/*")
public class LoginFilter implements Filter
private static final String name = "admin";
private static final String pass = "123";
@Override
public void destroy()
// TODO Auto-generated method stub
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
String name = request.getParameter("username");
String pass = request.getParameter("password");
if (name != null && pass != null)
if (LoginFilter.name.equals(name) && LoginFilter.pass.equals(pass))
((HttpServletRequest) request).getSession().setAttribute("username", name);
((HttpServletRequest) request).getSession().setAttribute("password", pass);
((HttpServletResponse) response).sendRedirect("/FilterLoginTest/pages/Home.jsp");
else
((HttpServletResponse) response).sendRedirect("/FilterLoginTest/pages/Login.jsp");
else
name = (String)((HttpServletRequest) request).getSession().getAttribute("username");
if(name == null)
((HttpServletResponse) response).sendRedirect("/FilterLoginTest/pages/Login.jsp");
chain.doFilter(request, response);
@Override
public void init(FilterConfig arg0) throws ServletException
// TODO Auto-generated method stub
【问题讨论】:
【参考方案1】:不知道为什么要这样实现,
看看 JAAS JAAS for human beings
此外,如果您需要实现此过滤器,登录后将用户对象放入会话中是一种常见行为,例如,过滤器将针对 null 对其进行测试, 如果是关于授权,您将检查 URL,例如针对预定义的角色列表来传递请求或重定向到未经授权的页面
【讨论】:
以上是关于Servlet过滤器登录重定向无限循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用 Servlet 过滤器和 j_security_check 登录时出现无限循环
成功登录后的 Node.js Express 无限重定向循环
第一次成功登录 MVC .NET 5 OWIN ADAL OpenIDConnect 后,第二次登录导致无限重定向循环