Filter-案例-登录验证-分析Filter-登录验证-代码实现
Filter-案例-登录验证-分析
需求:
1.访问day17_case案例的资源。验证其是否登录
2.如果登录了,则直接放行。
3.如果没有登录,则跳转到登录页面,提示"您尚未登录,请先登录"。
Filter-登录案例-代码实现
package com.jstl.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; // 完成登录验证的过滤器 @WebFilter("/*") public class LoginFilter 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; // 获取资源请求路径 String url = request.getRequestURI(); // 判断是否包含登录相关资源路径 要注意排除css,js,图片,验证码等资源 if (url.contains("/login.jsp") || url.contains("/loginServlets") || url.contains("/js/") || url.contains("/fonts/") || url.contains("/checkCodeServlets")) { // 包含,用于就是想登录,放行 filterChain.doFilter(servletRequest,servletResponse); } else { // 不包含,获取验证用户是否登录 // 从获取session中获取user Object user = request.getSession().getAttribute("user"); if (url != null) { // 登录,放行 filterChain.doFilter(servletRequest,servletResponse); } else { // 没有登录,返回登录页面 request.setAttribute("login_msg","您尚未登录,请登录"); request.getRequestDispatcher("/login.jsp").forward(request,servletResponse); } } } @Override public void destroy() { } }