|
|
|
|
@ -16,49 +16,63 @@ import com.hua.entity.User;
|
|
|
|
|
* 1.检验旧密码是否正确
|
|
|
|
|
* 2.检验新密码与确认密码是否一致
|
|
|
|
|
*/
|
|
|
|
|
// 定义一个WebFilter,用于拦截特定的请求并进行相关处理
|
|
|
|
|
// 配置该过滤器作用于不同的DispatcherType(请求分发类型)以及特定的URL模式,这里拦截的是"/modifyPasswordServlet"的请求
|
|
|
|
|
@WebFilter(dispatcherTypes = {
|
|
|
|
|
DispatcherType.REQUEST,
|
|
|
|
|
DispatcherType.FORWARD,
|
|
|
|
|
DispatcherType.INCLUDE,
|
|
|
|
|
DispatcherType.ERROR
|
|
|
|
|
}
|
|
|
|
|
, urlPatterns = { "/modifyPasswordServlet" })
|
|
|
|
|
DispatcherType.REQUEST,
|
|
|
|
|
DispatcherType.FORWARD,
|
|
|
|
|
DispatcherType.INCLUDE,
|
|
|
|
|
DispatcherType.ERROR
|
|
|
|
|
}
|
|
|
|
|
, urlPatterns = { "/modifyPasswordServlet" })
|
|
|
|
|
public class ModifyPasswordFilter extends HttpFilter{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 重写父类的doFilter方法,该方法是过滤器的核心处理逻辑所在,用于处理拦截到的请求
|
|
|
|
|
public void doFilter(HttpServletRequest request,
|
|
|
|
|
HttpServletResponse response, FilterChain filterChain)
|
|
|
|
|
HttpServletResponse response, FilterChain filterChain)
|
|
|
|
|
throws IOException, ServletException {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 获取当前请求对应的HttpSession对象,用于在会话中存储和获取数据,比如获取已登录用户的相关信息等
|
|
|
|
|
HttpSession session = request.getSession();
|
|
|
|
|
// 从HttpSession中获取名为"user"的属性值,并将其转换为User类型,该对象应该是当前登录的用户信息
|
|
|
|
|
User user = (User) session.getAttribute("user");
|
|
|
|
|
// 从请求参数中获取名为"oldpassword"的参数值,即用户输入的旧密码
|
|
|
|
|
String oldpassword = request.getParameter("oldpassword");
|
|
|
|
|
// 从请求参数中获取名为"newpassword"的参数值,即用户输入的新密码
|
|
|
|
|
String newpassword = request.getParameter("newpassword");
|
|
|
|
|
// 从请求参数中获取名为"confirmpassword"的参数值,即用户再次输入用于确认的新密码
|
|
|
|
|
String confirmpassword = request.getParameter("confirmpassword");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 调用check方法检查用户输入的旧密码是否与数据库中存储的该用户的旧密码一致
|
|
|
|
|
if(check(user,oldpassword)){
|
|
|
|
|
// 如果旧密码正确,进一步检查新密码和确认密码是否一致
|
|
|
|
|
if(newpassword.equals(confirmpassword)){
|
|
|
|
|
//放行
|
|
|
|
|
// 如果新密码和确认密码一致,则放行请求,让请求继续向下传递到后续的过滤器或者目标Servlet等资源
|
|
|
|
|
filterChain.doFilter(request, response);
|
|
|
|
|
return;
|
|
|
|
|
}else{
|
|
|
|
|
// 如果新密码和确认密码不一致,将相应的提示信息存储到HttpSession中,用于在页面上显示给用户
|
|
|
|
|
session.setAttribute("message", "新密码与确认密码不一致");
|
|
|
|
|
}
|
|
|
|
|
}else{
|
|
|
|
|
// 如果旧密码不正确,将相应的提示信息存储到HttpSession中,用于在页面上显示给用户
|
|
|
|
|
session.setAttribute("message", "输入旧密码有误");
|
|
|
|
|
}
|
|
|
|
|
//返回修改页面
|
|
|
|
|
// 无论上述哪种校验不通过的情况,都重定向到修改密码页面(/modify/modifypassword.jsp),让用户重新输入正确的密码信息
|
|
|
|
|
response.sendRedirect(request.getContextPath() + "/modify/modifypassword.jsp");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 该方法用于检查用户输入的旧密码是否与数据库中存储的当前用户的旧密码一致
|
|
|
|
|
private boolean check(User user, String oldpassword) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 通过获取到的用户对象,获取其存储的密码,并与用户输入的旧密码进行比较,如果相等则返回true,表示旧密码正确
|
|
|
|
|
if(user.getPassword().equals(oldpassword)){
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 如果密码不相等,则返回false,表示旧密码错误
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|