我正在尝试使用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
}
}
答案 0 :(得分:0)
我想知道你为什么要这样实现呢,
看看JAAS JAAS for human beings
此外,如果您需要实现此过滤器,那么在登录后将用户对象放在会话中并且只是过滤器将针对null进行测试时,这是一种常见的行为, 如果它是关于授权的,您将检查网址,例如根据预定义的角色列表传递请求或重定向到未授权页面