diff --git a/login-base/src/main/java/ink/wgink/login/base/authentication/BaseAuthenticationProcessingFilter.java b/login-base/src/main/java/ink/wgink/login/base/authentication/BaseAuthenticationProcessingFilter.java index e8e65690..f543d292 100644 --- a/login-base/src/main/java/ink/wgink/login/base/authentication/BaseAuthenticationProcessingFilter.java +++ b/login-base/src/main/java/ink/wgink/login/base/authentication/BaseAuthenticationProcessingFilter.java @@ -1,6 +1,7 @@ package ink.wgink.login.base.authentication; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.login.base.consts.IUserCenterConst; import ink.wgink.login.base.exceptions.UserAuthenticationException; import ink.wgink.login.base.manager.ConfigManager; import org.apache.commons.lang3.StringUtils; @@ -65,4 +66,24 @@ public abstract class BaseAuthenticationProcessingFilter extends AbstractAuthent throw new UserAuthenticationException("登录方法必须是POST"); } } + + protected void checkReferToken(HttpServletRequest request) { + Object referToken = request.getSession().getAttribute(IUserCenterConst.REFER_TOKEN); + if(referToken == null) { + throw new UserAuthenticationException("refer参数为空,请重新刷新页面"); + } + String sessionReferToken = referToken.toString(); + if(StringUtils.isBlank(sessionReferToken)) { + throw new UserAuthenticationException("refer参数为空,请重新刷新页面"); + } + String pageReferToken = request.getParameter(IUserCenterConst.REFER_TOKEN); + if(StringUtils.isBlank(pageReferToken)) { + throw new UserAuthenticationException("请求头中缺少refer参数"); + } + if(!StringUtils.equals(sessionReferToken, pageReferToken)) { + throw new UserAuthenticationException("refer不匹配"); + } + // 校验成功删除session中的refer + request.getSession().removeAttribute(IUserCenterConst.REFER_TOKEN); + } } diff --git a/login-base/src/main/java/ink/wgink/login/base/authentication/user/UserAuthenticationFilter.java b/login-base/src/main/java/ink/wgink/login/base/authentication/user/UserAuthenticationFilter.java index ee213bf8..2fe1f2aa 100644 --- a/login-base/src/main/java/ink/wgink/login/base/authentication/user/UserAuthenticationFilter.java +++ b/login-base/src/main/java/ink/wgink/login/base/authentication/user/UserAuthenticationFilter.java @@ -32,6 +32,7 @@ public class UserAuthenticationFilter extends BaseAuthenticationProcessingFilter public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException, IOException, ServletException { checkVerificationCode(request); checkPostMethod(request); + checkReferToken(request); String username = request.getParameter(KEY_USERNAME); String password = request.getParameter(KEY_PASSWORD); diff --git a/login-base/src/main/java/ink/wgink/login/base/consts/IUserCenterConst.java b/login-base/src/main/java/ink/wgink/login/base/consts/IUserCenterConst.java index 6b36cea4..417a174d 100644 --- a/login-base/src/main/java/ink/wgink/login/base/consts/IUserCenterConst.java +++ b/login-base/src/main/java/ink/wgink/login/base/consts/IUserCenterConst.java @@ -103,4 +103,9 @@ public interface IUserCenterConst { */ String CUSTOM_LOGIN_FORM = "customLoginForm"; + /** + * refer验证token + */ + String REFER_TOKEN = "referToken"; + } diff --git a/login-base/src/main/java/ink/wgink/login/base/service/impl/OAuthServiceImpl.java b/login-base/src/main/java/ink/wgink/login/base/service/impl/OAuthServiceImpl.java index 5984ade2..561a19b9 100644 --- a/login-base/src/main/java/ink/wgink/login/base/service/impl/OAuthServiceImpl.java +++ b/login-base/src/main/java/ink/wgink/login/base/service/impl/OAuthServiceImpl.java @@ -6,6 +6,7 @@ import ink.wgink.login.base.manager.ConfigManager; import ink.wgink.login.base.service.IOAuthService; import ink.wgink.properties.BaseProperties; import ink.wgink.properties.ServerProperties; +import ink.wgink.util.UUIDUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,8 +31,14 @@ public class OAuthServiceImpl implements IOAuthService { @Override public Map getPageParams(HttpServletRequest request) { + // session中设置refer验证token + String referHeaderToken = UUIDUtil.getUUID(); + request.getSession().setAttribute(IUserCenterConst.REFER_TOKEN, referHeaderToken); + Map config = ConfigManager.getInstance().getConfig(); Map pageParams = new HashMap<>(16); + pageParams.put(IUserCenterConst.REFER_TOKEN, referHeaderToken); + Object errorMessage = request.getSession().getAttribute(IUserCenterConst.ERROR_MESSAGE); Object loginUsername = request.getSession().getAttribute(IUserCenterConst.LOGIN_USERNAME); pageParams.put(IUserCenterConst.ERROR_MESSAGE, errorMessage == null ? null : errorMessage.toString()); diff --git a/login-base/src/main/resources/templates/login.html b/login-base/src/main/resources/templates/login.html index 94b88059..b73f4dec 100644 --- a/login-base/src/main/resources/templates/login.html +++ b/login-base/src/main/resources/templates/login.html @@ -50,6 +50,7 @@