| | |
| | | import com.ruoyi.framework.manager.AsyncManager; |
| | | import com.ruoyi.framework.manager.factory.AsyncFactory; |
| | | import com.ruoyi.framework.security.context.AuthenticationContextHolder; |
| | | import com.ruoyi.system.model.TAppUser; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.security.core.Authentication; |
| | |
| | | clearLoginRecordCache(username); |
| | | } |
| | | } |
| | | public void validateApp(TAppUser user) |
| | | { |
| | | Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); |
| | | String username = usernamePasswordAuthenticationToken.getName(); |
| | | String password = usernamePasswordAuthenticationToken.getCredentials().toString(); |
| | | |
| | | Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); |
| | | |
| | | if (retryCount == null) |
| | | { |
| | | retryCount = 0; |
| | | } |
| | | |
| | | if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) |
| | | { |
| | | AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, |
| | | MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); |
| | | throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); |
| | | } |
| | | |
| | | if (!matchesApp(user, password)) |
| | | { |
| | | retryCount = retryCount + 1; |
| | | AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, |
| | | MessageUtils.message("user.password.retry.limit.count", retryCount))); |
| | | redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); |
| | | throw new UserPasswordNotMatchException(); |
| | | } |
| | | else |
| | | { |
| | | clearLoginRecordCache(username); |
| | | } |
| | | } |
| | | // public void validateApp(TAppUser user) |
| | | // { |
| | | // Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); |
| | | // String username = usernamePasswordAuthenticationToken.getName(); |
| | | // String password = usernamePasswordAuthenticationToken.getCredentials().toString(); |
| | | // |
| | | // Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); |
| | | // |
| | | // if (retryCount == null) |
| | | // { |
| | | // retryCount = 0; |
| | | // } |
| | | // |
| | | // if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) |
| | | // { |
| | | // AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, |
| | | // MessageUtils.message("user.password.retry.limit.exceed", maxRetryCount, lockTime))); |
| | | // throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); |
| | | // } |
| | | // |
| | | // if (!matchesApp(user, password)) |
| | | // { |
| | | // retryCount = retryCount + 1; |
| | | // AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, |
| | | // MessageUtils.message("user.password.retry.limit.count", retryCount))); |
| | | // redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); |
| | | // throw new UserPasswordNotMatchException(); |
| | | // } |
| | | // else |
| | | // { |
| | | // clearLoginRecordCache(username); |
| | | // } |
| | | // } |
| | | |
| | | public boolean matches(SysUser user, String rawPassword) |
| | | { |
| | | return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); |
| | | } |
| | | public boolean matchesApp(TAppUser user, String rawPassword) |
| | | { |
| | | return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); |
| | | } |
| | | // public boolean matchesApp(TAppUser user, String rawPassword) |
| | | // { |
| | | // return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); |
| | | // } |
| | | |
| | | public void clearLoginRecordCache(String loginName) |
| | | { |