|
@@ -9,6 +9,8 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import com.jiayue.ssi.constant.Constants;
|
|
import com.jiayue.ssi.constant.Constants;
|
|
import com.jiayue.ssi.factory.LoginFactory;
|
|
import com.jiayue.ssi.factory.LoginFactory;
|
|
|
|
+import com.jiayue.ssi.util.IPUtils;
|
|
|
|
+import com.jiayue.ssi.util.ResponseInfo;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.core.annotation.Order;
|
|
import org.springframework.core.annotation.Order;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
@@ -20,11 +22,11 @@ import com.jiayue.ssi.util.LocalCache;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
|
/**
|
|
/**
|
|
-* 验证码过滤器
|
|
|
|
-*
|
|
|
|
-* @author xsl
|
|
|
|
-* @since 2023/02/20
|
|
|
|
-*/
|
|
|
|
|
|
+ * 验证码过滤器
|
|
|
|
+ *
|
|
|
|
+ * @author xsl
|
|
|
|
+ * @since 2023/02/20
|
|
|
|
+ */
|
|
@RequiredArgsConstructor
|
|
@RequiredArgsConstructor
|
|
@Order(7)
|
|
@Order(7)
|
|
public class VerifyCodeFilter extends OncePerRequestFilter {
|
|
public class VerifyCodeFilter extends OncePerRequestFilter {
|
|
@@ -32,53 +34,47 @@ public class VerifyCodeFilter extends OncePerRequestFilter {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
|
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
|
|
- if ("POST".equalsIgnoreCase(request.getMethod()) && defaultFilterProcessUrl.equals(request.getServletPath())) {
|
|
|
|
- // 验证码验证
|
|
|
|
- String username = request.getParameter("username");
|
|
|
|
- String requestCaptcha = request.getParameter("code");
|
|
|
|
- String verifyuuid = request.getParameter("verifyuuid");
|
|
|
|
- Object uuidObj = LocalCache.get(CacheConstants.CAPTCHA_CODE_KEY + verifyuuid);
|
|
|
|
- // 校验服务端验证码
|
|
|
|
- if (uuidObj==null || "".equals(uuidObj)){
|
|
|
|
- // 记录验证码失败日志
|
|
|
|
- LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
- response.addHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
- response.setContentType("text/html;charset=UTF-8");
|
|
|
|
- response.setStatus(401);
|
|
|
|
- response.getWriter().write("验证码无效,需要重新获取!");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- // 校验页面验证码
|
|
|
|
- if (StringUtils.isEmpty(requestCaptcha)) {
|
|
|
|
- // 记录验证码失败日志
|
|
|
|
- LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
- response.addHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
- response.setContentType("text/html;charset=UTF-8");
|
|
|
|
- response.setStatus(401);
|
|
|
|
- response.getWriter().write("非法访问,验证码错误!");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- if (requestCaptcha.length()!=4){
|
|
|
|
- // 记录验证码失败日志
|
|
|
|
- LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
- response.addHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
- response.setContentType("text/html;charset=UTF-8");
|
|
|
|
- response.setStatus(401);
|
|
|
|
- response.getWriter().write("需要4位验证码!");
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- if (!String.valueOf(uuidObj).toLowerCase().equals(requestCaptcha.toLowerCase())) {
|
|
|
|
- // 记录验证码失败日志
|
|
|
|
- LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
- // 删除缓存验证码
|
|
|
|
- LocalCache.remove(CacheConstants.CAPTCHA_CODE_KEY + verifyuuid);
|
|
|
|
- response.addHeader("Access-Control-Allow-Origin", "*");
|
|
|
|
- response.setContentType("text/html;charset=UTF-8");
|
|
|
|
- response.setStatus(401);
|
|
|
|
- response.getWriter().write("验证码错误!");
|
|
|
|
- return;
|
|
|
|
|
|
+ try {
|
|
|
|
+ if ("POST".equalsIgnoreCase(request.getMethod()) && defaultFilterProcessUrl.equals(request.getServletPath())) {
|
|
|
|
+ // 验证码验证
|
|
|
|
+ String username = request.getParameter("username");
|
|
|
|
+ String requestCaptcha = request.getParameter("code");
|
|
|
|
+ String verifyuuid = request.getParameter("verifyuuid");
|
|
|
|
+ String murmur = request.getParameter("murmur");
|
|
|
|
+ Object uuidObj = LocalCache.get(CacheConstants.CAPTCHA_CODE_KEY + verifyuuid + murmur);
|
|
|
|
+ // 校验服务端验证码
|
|
|
|
+ if (uuidObj == null || "".equals(uuidObj)) {
|
|
|
|
+ // 记录验证码失败日志
|
|
|
|
+ LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
+ ResponseInfo.doResponse(response, "验证码无效,需要重新获取!", 401);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ // 校验页面验证码
|
|
|
|
+ if (StringUtils.isEmpty(requestCaptcha)) {
|
|
|
|
+ // 记录验证码失败日志
|
|
|
|
+ LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
+ ResponseInfo.doResponse(response, "非法访问,验证码错误!", 401);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (requestCaptcha.length() != 4) {
|
|
|
|
+ // 记录验证码失败日志
|
|
|
|
+ LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
+ ResponseInfo.doResponse(response, "需要4位验证码!", 401);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (!String.valueOf(uuidObj).toLowerCase().equals(requestCaptcha.toLowerCase())) {
|
|
|
|
+ // 记录验证码失败日志
|
|
|
|
+ LoginFactory.recordLogininfor(username, Constants.LOGIN_FAIL, "验证码错误");
|
|
|
|
+ // 删除缓存验证码
|
|
|
|
+ LocalCache.remove(CacheConstants.CAPTCHA_CODE_KEY + verifyuuid + murmur);
|
|
|
|
+ ResponseInfo.doResponse(response, "验证码错误!", 401);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ filterChain.doFilter(request, response);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ ResponseInfo.doResponse(response, "验证码校验失败!", 401);
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
- filterChain.doFilter(request, response);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|