问题:
(1)想要的效果:
在过滤器中,进行简单的限制访问。
使用request.getRequestURI()获取链接,在登录servlet中,当用户输入账号密码点击登录按钮后,使用session存储user、用户名键值对,随后在跳转至主页面;当链接不是以login.jsp结尾且session存储的user为null,则跳转至登录界面login.jsp。
(2)出现的问题:
当跳转至登录页面点击登录后,提示如下错误。问题相关代码:
(1)过滤器:
@WebFilter(urlPatterns = "/*")
public class WebFilter1 implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
HttpServletResponse response = (HttpServletResponse)servletResponse;
HttpSession session = request.getSession();
//限制访问
String requestURI = request.getRequestURI();
Object user = session.getAttribute("user");
if((!requestURI.endsWith("login.jsp")) && user==null){
response.sendRedirect("/login.jsp");
}
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {}
}
(2)登录页面对应servlet:
@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userName = req.getParameter("userName");
String password = req.getParameter("password");
UsersService usersService = new UsersServiceImpl();
Users users = usersService.loginResult(userName, password);
resp.setContentType("text/html;charset=utf-8");
if(users == null){
PrintWriter writer = resp.getWriter();
writer.println("<script>location.href='login.jsp';alert('用户名或密码不正确')</script>");
}else{
HttpSession session = req.getSession();
session.setAttribute("user",users);
resp.sendRedirect("index.jsp");
}
}
}
- 报错内容 :