1、实现登录操作时提示的错误信息可封装在request域中,如下所示:
然后再JSP中访问域中的数据:
<div id="errorMsg">${login_msg} ${register_msg}</div>
获取cookie中的值:
2、Filter
概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。
过滤器一般完成一些通用的操作,比如:权限控制、统一编码处理、敏感字符处理等等
2.1、Filter快速入门
2.2、filter拦截路径的设置:
2.3、过滤器链:一个web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。
==注解配置的Fiter,优先级按照过滤器类名(字符串)的自然排序。==
2.4、登录验证
Java代码如下所示:
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
/**
* 拦截所有路径
*/
@WebFilter("/*")
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
//类型转换
HttpServletRequest req = (HttpServletRequest) request;
//直接放行的路径(当访问注册或者登录的页面时,可以直接放行)
String[] urls = {"/login.jsp", "/imgs/", "/css/", "/loginServlet", "/registerServlet", "/checkCodeServlet"};
//获取当前访问的资源路径
String url = req.getRequestURL().toString();
//循环遍历数组并且判断
for (String s : urls) {
//找到了
if (url.contains(s)) {
//直接放行
chain.doFilter(request, response);
//结束方法
return;
}
}
//判断session中是否有user
HttpSession session = req.getSession();
Object user = session.getAttribute("user");
//判断user是否为空
if (user != null) {
//登录了,直接放行
chain.doFilter(request, response);
} else {
//没有登录,返回一个错误信息
req.setAttribute("login_msg", "您尚未登录!");
//返回登录页面
req.getRequestDispatcher("/login.jsp").forward(req, response);
}
}
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
}