|
|
|
|
@ -1,48 +1,48 @@
|
|
|
|
|
package com.hua.filter;
|
|
|
|
|
package com.hua.filter; // 定义包名
|
|
|
|
|
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import javax.servlet.DispatcherType;
|
|
|
|
|
import javax.servlet.FilterChain;
|
|
|
|
|
import javax.servlet.ServletException;
|
|
|
|
|
import javax.servlet.annotation.WebFilter;
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
import java.io.IOException; // 导入IOException类,用于处理IO异常
|
|
|
|
|
import javax.servlet.DispatcherType; // 导入DispatcherType枚举,用于定义过滤器的调度类型
|
|
|
|
|
import javax.servlet.FilterChain; // 导入FilterChain接口,用于调用下一个过滤器或目标资源
|
|
|
|
|
import javax.servlet.ServletException; // 导入ServletException类,用于处理servlet异常
|
|
|
|
|
import javax.servlet.annotation.WebFilter; // 导入WebFilter注解,用于声明过滤器
|
|
|
|
|
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest接口,用于处理HTTP请求
|
|
|
|
|
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse接口,用于处理HTTP响应
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 登录时检验 验证码是否一致
|
|
|
|
|
* 登录时检验 验证码是否一致
|
|
|
|
|
* @author hua
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
@WebFilter(dispatcherTypes = {
|
|
|
|
|
DispatcherType.REQUEST,
|
|
|
|
|
DispatcherType.FORWARD,
|
|
|
|
|
DispatcherType.INCLUDE,
|
|
|
|
|
DispatcherType.ERROR
|
|
|
|
|
@WebFilter(dispatcherTypes = { // 使用WebFilter注解定义过滤器,并指定其调度类型
|
|
|
|
|
DispatcherType.REQUEST, // 请求调度类型
|
|
|
|
|
DispatcherType.FORWARD, // 转发调度类型
|
|
|
|
|
DispatcherType.INCLUDE, // 包含调度类型
|
|
|
|
|
DispatcherType.ERROR // 错误调度类型
|
|
|
|
|
}
|
|
|
|
|
, urlPatterns = { "/loginChangeServlet" })
|
|
|
|
|
public class LoginCheckCodeFilter extends HttpFilter {
|
|
|
|
|
, urlPatterns = { "/loginChangeServlet" }) // 指定过滤器的URL模式
|
|
|
|
|
public class LoginCheckCodeFilter extends HttpFilter { // 定义LoginCheckCodeFilter类,继承自HttpFilter
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void doFilter(HttpServletRequest request,
|
|
|
|
|
public void doFilter(HttpServletRequest request, // 覆盖doFilter方法,处理请求
|
|
|
|
|
HttpServletResponse response, FilterChain filterChain)
|
|
|
|
|
throws IOException, ServletException {
|
|
|
|
|
//1. 获取请求参数: CHECK_CODE_PARAM_NAME
|
|
|
|
|
String paramCode = request.getParameter("CHECK_CODE_PARAM_NAME");
|
|
|
|
|
|
|
|
|
|
//2. 获取 session 中的 CHECK_CODE_KEY 属性值
|
|
|
|
|
String sessionCode = (String)request.getSession().getAttribute("CHECK_CODE_KEY");
|
|
|
|
|
|
|
|
|
|
//3. 比对. 看是否一致, 若一致说明验证码正确, 若不一致, 说明验证码错误
|
|
|
|
|
if(!(paramCode != null && paramCode.equalsIgnoreCase(sessionCode))){
|
|
|
|
|
request.getSession().setAttribute("message", "验证码不一致!");
|
|
|
|
|
request.getSession().setAttribute("username", request.getParameter("username"));
|
|
|
|
|
//1. 获取请求参数: CHECK_CODE_PARAM_NAME
|
|
|
|
|
String paramCode = request.getParameter("CHECK_CODE_PARAM_NAME"); // 从请求中获取名为"CHECK_CODE_PARAM_NAME"的参数值
|
|
|
|
|
|
|
|
|
|
//2. 获取 session 中的 CHECK_CODE_KEY 属性值
|
|
|
|
|
String sessionCode = (String)request.getSession().getAttribute("CHECK_CODE_KEY"); // 从session中获取名为"CHECK_CODE_KEY"的属性值
|
|
|
|
|
|
|
|
|
|
//3. 比对. 看是否一致, 若一致说明验证码正确, 若不一致, 说明验证码错误
|
|
|
|
|
if(!(paramCode != null && paramCode.equalsIgnoreCase(sessionCode))){ // 判断参数值和session值是否相等(忽略大小写)
|
|
|
|
|
request.getSession().setAttribute("message", "验证码不一致!"); // 设置错误消息到session
|
|
|
|
|
request.getSession().setAttribute("username", request.getParameter("username")); // 将用户名设置到session中
|
|
|
|
|
|
|
|
|
|
response.sendRedirect(request.getContextPath() + "/login/login.jsp");
|
|
|
|
|
return;
|
|
|
|
|
response.sendRedirect(request.getContextPath() + "/login/login.jsp"); // 重定向到登录页面
|
|
|
|
|
return; // 中断方法执行
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
filterChain.doFilter(request, response);
|
|
|
|
|
filterChain.doFilter(request, response); // 如果验证码正确,继续调用过滤器链
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|