瀏覽代碼

mv to repository

MaxKey 3 年之前
父節點
當前提交
e0a274fada
共有 43 個文件被更改,包括 884 次插入306 次删除
  1. 18 1
      maxkey-authentications/maxkey-authentication-captcha/src/main/java/com/google/code/kaptcha/impl/LightNoise.java
  2. 17 0
      maxkey-authentications/maxkey-authentication-captcha/src/main/java/com/google/code/kaptcha/impl/Ripple.java
  3. 17 0
      maxkey-authentications/maxkey-authentication-captcha/src/main/java/com/google/code/kaptcha/text/impl/RandomColorWordRenderer.java
  4. 15 15
      maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/AbstractAuthenticationRealm.java
  5. 16 15
      maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/jdbc/JdbcAuthenticationRealm.java
  6. 9 9
      maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/autoconfigure/AuthenticationAutoConfiguration.java
  7. 17 0
      maxkey-common/src/main/java/org/maxkey/util/ExcelUtils.java
  8. 1 1
      maxkey-common/src/test/java/org/maxkey/Copyright.java
  9. 17 0
      maxkey-common/src/test/java/org/maxkey/Integer2LongTest.java
  10. 1 1
      maxkey-common/src/test/java/org/maxkey/copyright.txt
  11. 17 0
      maxkey-common/src/test/java/org/maxkey/util/InstanceTest.java
  12. 17 0
      maxkey-common/src/test/java/org/maxkey/word/RunJavaEnvs.java
  13. 9 8
      maxkey-core/src/main/java/org/maxkey/autoconfigure/ApplicationAutoConfiguration.java
  14. 8 8
      maxkey-core/src/main/java/org/maxkey/autoconfigure/MvcAutoConfiguration.java
  15. 280 0
      maxkey-core/src/main/java/org/maxkey/entity/LdapContext.java
  16. 17 0
      maxkey-core/src/main/java/org/maxkey/entity/Localization.java
  17. 4 4
      maxkey-core/src/main/java/org/maxkey/persistence/repository/InstitutionsRepository.java
  18. 7 7
      maxkey-core/src/main/java/org/maxkey/persistence/repository/LocalizationRepository.java
  19. 4 4
      maxkey-core/src/main/java/org/maxkey/persistence/repository/LoginHistoryRepository.java
  20. 5 5
      maxkey-core/src/main/java/org/maxkey/persistence/repository/LoginRepository.java
  21. 1 1
      maxkey-core/src/main/java/org/maxkey/persistence/repository/PasswordPolicyMessageResolver.java
  22. 185 0
      maxkey-core/src/main/java/org/maxkey/persistence/repository/PasswordPolicyRepository.java
  23. 14 157
      maxkey-core/src/main/java/org/maxkey/persistence/repository/PasswordPolicyValidator.java
  24. 18 18
      maxkey-core/src/main/java/org/maxkey/web/SessionListenerAdapter.java
  25. 5 5
      maxkey-core/src/main/java/org/maxkey/web/WebInstRequestFilter.java
  26. 2 2
      maxkey-core/src/main/java/org/maxkey/web/tag/LocaleTagDirective.java
  27. 17 0
      maxkey-gataway/src/main/java/org/gateway/GatewayApplication.java
  28. 17 0
      maxkey-gataway/src/main/java/org/gateway/controller/FallbackController.java
  29. 17 0
      maxkey-gataway/src/main/java/org/gateway/filter/AuthAndLogFilter.java
  30. 17 0
      maxkey-gataway/src/main/java/org/gateway/route/NacosDynamicRouteService.java
  31. 17 0
      maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimParameters.java
  32. 1 1
      maxkey-persistence/src/main/java/org/maxkey/persistence/service/UserInfoService.java
  33. 9 10
      maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/authz/oauth2/provider/OAuth2UserDetailsService.java
  34. 3 3
      maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/autoconfigure/Oauth20AutoConfiguration.java
  35. 17 0
      maxkey-webs/maxkey-boot-monitor/src/main/java/org/maxkey/boot/monitor/MaxKeyBootMonitor.java
  36. 17 0
      maxkey-webs/maxkey-boot-monitor/src/main/java/org/maxkey/boot/monitor/MonitorSecurityConfigurer.java
  37. 5 5
      maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java
  38. 1 1
      maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/ForgotPasswordContorller.java
  39. 1 1
      maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/SafeController.java
  40. 6 6
      maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java
  41. 7 7
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtConfig.java
  42. 5 5
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LocalizationController.java
  43. 6 6
      maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java

+ 18 - 1
maxkey-authentications/maxkey-authentication-captcha/src/main/java/com/google/code/kaptcha/impl/LightNoise.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package com.google.code.kaptcha.impl;
 
 import java.awt.BasicStroke;
@@ -91,4 +108,4 @@ public class LightNoise extends Configurable implements NoiseProducer
 
 		graph.dispose();
 	}
-}
+}

+ 17 - 0
maxkey-authentications/maxkey-authentication-captcha/src/main/java/com/google/code/kaptcha/impl/Ripple.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package com.google.code.kaptcha.impl;
 
 import java.awt.Graphics2D;

+ 17 - 0
maxkey-authentications/maxkey-authentication-captcha/src/main/java/com/google/code/kaptcha/text/impl/RandomColorWordRenderer.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package com.google.code.kaptcha.text.impl;
 
 import java.awt.Color;

+ 15 - 15
maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/AbstractAuthenticationRealm.java

@@ -26,10 +26,10 @@ import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
 import org.maxkey.entity.Groups;
 import org.maxkey.entity.HistoryLogin;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.persistence.service.UserInfoService;
-import org.maxkey.persistence.db.LoginService;
 import org.maxkey.util.DateUtils;
 import org.maxkey.web.WebConstants;
 import org.maxkey.web.WebContext;
@@ -52,9 +52,9 @@ public abstract class AbstractAuthenticationRealm {
     
     protected PasswordPolicyValidator passwordPolicyValidator;
     
-    protected LoginService loginService;
+    protected LoginRepository loginRepository;
 
-    protected LoginHistoryService loginHistoryService;
+    protected LoginHistoryRepository loginHistoryRepository;
 
     protected AbstractRemeberMeService remeberMeService;
     
@@ -81,12 +81,12 @@ public abstract class AbstractAuthenticationRealm {
         return passwordPolicyValidator;
     }
 
-    public LoginService getUserInfoLoginService() {
-        return loginService;
+    public LoginRepository getLoginRepository() {
+        return loginRepository;
     }
 
     public UserInfo loadUserInfo(String username, String password) {
-        return loginService.find(username, password);
+        return loginRepository.find(username, password);
     }
 
     public abstract boolean passwordMatches(UserInfo userInfo, String password);
@@ -102,7 +102,7 @@ public abstract class AbstractAuthenticationRealm {
 
 
     public List<Groups> queryGroups(UserInfo userInfo) {
-       return loginService.queryGroups(userInfo);
+       return loginRepository.queryGroups(userInfo);
     }
 
     /**
@@ -112,7 +112,7 @@ public abstract class AbstractAuthenticationRealm {
      * @return ArrayList<GrantedAuthority>
      */
     public ArrayList<GrantedAuthority> grantAuthority(UserInfo userInfo) {
-        return loginService.grantAuthority(userInfo);
+        return loginRepository.grantAuthority(userInfo);
     }
     
     /**
@@ -122,7 +122,7 @@ public abstract class AbstractAuthenticationRealm {
      * @return ArrayList<GrantedAuthority Apps>
      */
     public ArrayList<GrantedAuthority> queryAuthorizedApps(ArrayList<GrantedAuthority> grantedAuthoritys) {
-        return loginService.queryAuthorizedApps(grantedAuthoritys);
+        return loginRepository.queryAuthorizedApps(grantedAuthoritys);
     }
 
     /**
@@ -161,9 +161,9 @@ public abstract class AbstractAuthenticationRealm {
         historyLogin.setDisplayName(userInfo.getDisplayName());
         historyLogin.setInstId(userInfo.getInstId());
         
-        loginHistoryService.login(historyLogin);
+        loginHistoryRepository.login(historyLogin);
         
-        loginService.updateLastLogin(userInfo);
+        loginRepository.updateLastLogin(userInfo);
 
         return true;
     }
@@ -182,10 +182,10 @@ public abstract class AbstractAuthenticationRealm {
             if (sessionIdAttribute != null) {
                 remeberMeService.removeRemeberMe(response);
 
-                loginHistoryService.logoff(userInfo.getLastLogoffTime(), sessionIdAttribute.toString());
+                loginHistoryRepository.logoff(userInfo.getLastLogoffTime(), sessionIdAttribute.toString());
             }
             
-            loginService.updateLastLogoff(userInfo);
+            loginRepository.updateLastLogoff(userInfo);
             
             _logger.debug("Session " + WebContext.getAttribute(WebConstants.CURRENT_USER_SESSION_ID) + ", user "
                     + userInfo.getUsername() + " Logout, datetime " + userInfo.getLastLogoffTime() + " .");

+ 16 - 15
maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/authn/realm/jdbc/JdbcAuthenticationRealm.java

@@ -20,10 +20,11 @@ package org.maxkey.authn.realm.jdbc;
 import org.maxkey.authn.realm.AbstractAuthenticationRealm;
 import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
 import org.maxkey.constants.ConstantsLoginType;
+import org.maxkey.entity.PasswordPolicy;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.web.WebConstants;
 import org.maxkey.web.WebContext;
@@ -54,16 +55,16 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
     public JdbcAuthenticationRealm(
     		PasswordEncoder passwordEncoder,
     		PasswordPolicyValidator passwordPolicyValidator,
-    		LoginService loginService,
-    		LoginHistoryService loginHistoryService,
+    		LoginRepository loginRepository,
+    		LoginHistoryRepository loginHistoryRepository,
     		AbstractRemeberMeService remeberMeService,
     		UserInfoService userInfoService,
     	    JdbcTemplate jdbcTemplate) {
     	
     	this.passwordEncoder =passwordEncoder;
     	this.passwordPolicyValidator=passwordPolicyValidator;
-    	this.loginService = loginService;
-    	this.loginHistoryService = loginHistoryService;
+    	this.loginRepository = loginRepository;
+    	this.loginHistoryRepository = loginHistoryRepository;
     	this.remeberMeService = remeberMeService;
     	 this.userInfoService = userInfoService;
         this.jdbcTemplate = jdbcTemplate;
@@ -73,8 +74,8 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
     public JdbcAuthenticationRealm(
     		PasswordEncoder passwordEncoder,
     		PasswordPolicyValidator passwordPolicyValidator,
-    		LoginService loginService,
-    		LoginHistoryService loginHistoryService,
+    		LoginRepository loginRepository,
+    		LoginHistoryRepository loginHistoryRepository,
     		AbstractRemeberMeService remeberMeService,
     		UserInfoService userInfoService,
     	    JdbcTemplate jdbcTemplate,
@@ -84,8 +85,8 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
     	
     	this.passwordEncoder =passwordEncoder;
     	this.passwordPolicyValidator=passwordPolicyValidator;
-    	this.loginService = loginService;
-    	this.loginHistoryService = loginHistoryService;
+    	this.loginRepository = loginRepository;
+    	this.loginHistoryRepository = loginHistoryRepository;
     	this.remeberMeService = remeberMeService;
         this.jdbcTemplate = jdbcTemplate;
         this.ldapAuthenticationRealm = ldapAuthenticationRealm;
@@ -121,14 +122,14 @@ public class JdbcAuthenticationRealm extends AbstractAuthenticationRealm {
         if (!passwordMatches) {
             passwordPolicyValidator.plusBadPasswordCount(userInfo);
             insertLoginHistory(userInfo, ConstantsLoginType.LOCAL, "", "xe00000004", WebConstants.LOGIN_RESULT.PASSWORD_ERROE);
-            
-            if(userInfo.getBadPasswordCount()>=(passwordPolicyValidator.getPasswordPolicy().getAttempts()/2)) {
+            PasswordPolicy passwordPolicy = passwordPolicyValidator.getPasswordPolicyRepository().getPasswordPolicy();
+            if(userInfo.getBadPasswordCount()>=(passwordPolicy.getAttempts()/2)) {
                 throw new BadCredentialsException(
                         WebContext.getI18nValue("login.error.password.attempts",
                                 new Object[]{
                                         userInfo.getBadPasswordCount() + 1,
-                                        passwordPolicyValidator.getPasswordPolicy().getAttempts(),
-                                        passwordPolicyValidator.getPasswordPolicy().getDuration()}));
+                                        passwordPolicy.getAttempts(),
+                                        passwordPolicy.getDuration()}));
             }else {
                 throw new BadCredentialsException(WebContext.getI18nValue("login.error.password"));
             }

+ 9 - 9
maxkey-authentications/maxkey-authentication-core/src/main/java/org/maxkey/autoconfigure/AuthenticationAutoConfiguration.java

@@ -27,8 +27,10 @@ import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
 import org.maxkey.authn.support.rememberme.RemeberMeServiceFactory;
 import org.maxkey.configuration.ApplicationConfig;
 import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
 import org.maxkey.persistence.redis.RedisConnectionFactory;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
@@ -37,8 +39,6 @@ import org.springframework.context.MessageSource;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.maxkey.persistence.db.LoginService;
-import org.maxkey.persistence.db.LoginHistoryService;
 
 
 @Configuration
@@ -80,13 +80,13 @@ public class AuthenticationAutoConfiguration  implements InitializingBean {
         return new PasswordPolicyValidator(jdbcTemplate,messageSource);
     }
     
-    @Bean(name = "loginService")
-    public LoginService LoginService(JdbcTemplate jdbcTemplate) {
-        return new LoginService(jdbcTemplate);
+    @Bean(name = "loginRepository")
+    public LoginRepository loginRepository(JdbcTemplate jdbcTemplate) {
+        return new LoginRepository(jdbcTemplate);
     }
-    @Bean(name = "loginHistoryService")
-    public LoginHistoryService loginHistoryService(JdbcTemplate jdbcTemplate) {
-        return new LoginHistoryService(jdbcTemplate);
+    @Bean(name = "loginHistoryRepository")
+    public LoginHistoryRepository LoginHistoryRepository(JdbcTemplate jdbcTemplate) {
+        return new LoginHistoryRepository(jdbcTemplate);
     }
     
     /**

+ 17 - 0
maxkey-common/src/main/java/org/maxkey/util/ExcelUtils.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.util;
 
 import java.text.DecimalFormat;

+ 1 - 1
maxkey-common/src/test/java/org/maxkey/Copyright.java

@@ -31,7 +31,7 @@ import java.io.OutputStreamWriter;
  */
 public class Copyright {   
     // 存放java文件的文件夹,必须是文件夹
-    private static String srcFolder = "C:\\IDES\\shimi\\eclipse-workspace\\MaxKey";
+    private static String srcFolder = "D:\\MaxKey\\workspace\\workspace-maxkey\\MaxKey";
     //已添加标识
     private static String copyRightText = "http://www.apache.org/licenses/LICENSE-2.0";
     //扫描目录

+ 17 - 0
maxkey-common/src/test/java/org/maxkey/Integer2LongTest.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey;
 
 public class Integer2LongTest {

+ 1 - 1
maxkey-common/src/test/java/org/maxkey/copyright.txt

@@ -1,5 +1,5 @@
 /*
- * Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.

+ 17 - 0
maxkey-common/src/test/java/org/maxkey/util/InstanceTest.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.util;
 
 import java.security.Provider;

+ 17 - 0
maxkey-common/src/test/java/org/maxkey/word/RunJavaEnvs.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.word;
 
 import java.util.Iterator;

+ 9 - 8
maxkey-core/src/main/java/org/maxkey/autoconfigure/ApplicationAutoConfiguration.java

@@ -29,8 +29,8 @@ import org.maxkey.crypto.password.MessageDigestPasswordEncoder;
 import org.maxkey.crypto.password.PasswordReciprocal;
 import org.maxkey.crypto.password.SM3PasswordEncoder;
 import org.maxkey.crypto.password.StandardPasswordEncoder;
-import org.maxkey.persistence.db.InstitutionService;
-import org.maxkey.persistence.db.LocalizationService;
+import org.maxkey.persistence.repository.InstitutionsRepository;
+import org.maxkey.persistence.repository.LocalizationRepository;
 import org.maxkey.util.IdGenerator;
 import org.maxkey.util.SnowFlakeId;
 import org.maxkey.web.WebContext;
@@ -65,14 +65,15 @@ public class ApplicationAutoConfiguration  implements InitializingBean {
         return new DataSourceTransactionManager(dataSource);
     }
     
-    @Bean(name = "institutionService")
-    public InstitutionService institutionService(JdbcTemplate jdbcTemplate) {
-        return new InstitutionService(jdbcTemplate);
+    @Bean(name = "institutionsRepository")
+    public InstitutionsRepository InstitutionsRepository(JdbcTemplate jdbcTemplate) {
+        return new InstitutionsRepository(jdbcTemplate);
     }
     
-    @Bean(name = "localizationService")
-    public LocalizationService localizationService(JdbcTemplate jdbcTemplate,InstitutionService institutionService) {
-        return new LocalizationService(jdbcTemplate,institutionService);
+    @Bean(name = "localizationRepository")
+    public LocalizationRepository localizationRepository(JdbcTemplate jdbcTemplate,
+    											InstitutionsRepository institutionsRepository) {
+        return new LocalizationRepository(jdbcTemplate,institutionsRepository);
     }
     
     /**

+ 8 - 8
maxkey-core/src/main/java/org/maxkey/autoconfigure/MvcAutoConfiguration.java

@@ -24,9 +24,9 @@ import javax.servlet.Filter;
 
 import org.maxkey.configuration.ApplicationConfig;
 import org.maxkey.constants.ConstantsTimeInterval;
-import org.maxkey.persistence.db.InstitutionService;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
+import org.maxkey.persistence.repository.InstitutionsRepository;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
 import org.maxkey.web.SessionListenerAdapter;
 import org.maxkey.web.WebXssRequestFilter;
 import org.maxkey.web.WebInstRequestFilter;
@@ -284,11 +284,11 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer
     
     @Bean
     public FilterRegistrationBean<Filter> WebInstRequestFilter(
-    											InstitutionService institutionService,
+    											InstitutionsRepository institutionsRepository,
     											ApplicationConfig applicationConfig) {
         _logger.debug("WebInstRequestFilter init for /* ");
         FilterRegistrationBean<Filter> registrationBean = 
-        		new FilterRegistrationBean<Filter>(new WebInstRequestFilter(institutionService,applicationConfig));
+        		new FilterRegistrationBean<Filter>(new WebInstRequestFilter(institutionsRepository,applicationConfig));
         registrationBean.addUrlPatterns("/*");
         registrationBean.setName("webInstRequestFilter");
         registrationBean.setOrder(3);
@@ -297,11 +297,11 @@ public class MvcAutoConfiguration implements InitializingBean , WebMvcConfigurer
     
     @Bean(name = "sessionListenerAdapter")
     public SessionListenerAdapter sessionListenerAdapter(
-                LoginService loginService,
-                LoginHistoryService loginHistoryService
+                LoginRepository loginRepository,
+                LoginHistoryRepository loginHistoryRepository
             ) {
         SessionListenerAdapter sessionListenerAdapter =
-                new SessionListenerAdapter(loginService,loginHistoryService);
+                new SessionListenerAdapter(loginRepository,loginHistoryRepository);
         return sessionListenerAdapter;
     }
     

+ 280 - 0
maxkey-core/src/main/java/org/maxkey/entity/LdapContext.java

@@ -0,0 +1,280 @@
+/*
+ * Copyright [2021] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
+package org.maxkey.entity;
+
+import java.io.Serializable;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import org.apache.mybatis.jpa.persistence.JpaBaseEntity;
+
+@Entity
+@Table(name = "MXK_LDAP_CONTEXT")
+public class LdapContext extends JpaBaseEntity implements Serializable {
+
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -4595539647817265938L;
+	@Id
+    @Column
+    @GeneratedValue(strategy = GenerationType.AUTO, generator = "snowflakeid")
+    String id;
+    @Column
+    String product;
+    @Column
+    String providerUrl;
+    @Column
+    String principal;
+    @Column
+    String credentials;
+    @Column
+    String filters;
+    @Column
+    String basedn;
+    @Column
+    String msadDomain;
+    @Column
+    String sslSwitch;
+    @Column
+    String trustStore;
+    @Column
+    String trustStorePassword;
+    @Column
+    String description;
+    @Column
+    String createdBy;
+    @Column
+    String createdDate;
+    @Column
+    String modifiedBy;
+    @Column
+    String modifiedDate;
+    @Column
+    int status;
+    
+	@Column
+	private String instId;
+
+	private String instName;
+
+    public LdapContext() {
+    }
+
+	public String getId() {
+		return id;
+	}
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	public String getProduct() {
+		return product;
+	}
+
+	public void setProduct(String product) {
+		this.product = product;
+	}
+
+	public String getProviderUrl() {
+		return providerUrl;
+	}
+
+	public void setProviderUrl(String providerUrl) {
+		this.providerUrl = providerUrl;
+	}
+
+	public String getPrincipal() {
+		return principal;
+	}
+
+	public void setPrincipal(String principal) {
+		this.principal = principal;
+	}
+
+	public String getCredentials() {
+		return credentials;
+	}
+
+	public void setCredentials(String credentials) {
+		this.credentials = credentials;
+	}
+
+	public String getFilters() {
+		return filters;
+	}
+
+	public void setFilters(String filters) {
+		this.filters = filters;
+	}
+
+	public String getBasedn() {
+		return basedn;
+	}
+
+	public void setBasedn(String basedn) {
+		this.basedn = basedn;
+	}
+
+	public String getMsadDomain() {
+		return msadDomain;
+	}
+
+	public void setMsadDomain(String msadDomain) {
+		this.msadDomain = msadDomain;
+	}
+
+	public String getSslSwitch() {
+		return sslSwitch;
+	}
+
+	public void setSslSwitch(String sslSwitch) {
+		this.sslSwitch = sslSwitch;
+	}
+
+	public String getTrustStore() {
+		return trustStore;
+	}
+
+	public void setTrustStore(String trustStore) {
+		this.trustStore = trustStore;
+	}
+
+	public String getTrustStorePassword() {
+		return trustStorePassword;
+	}
+
+	public void setTrustStorePassword(String trustStorePassword) {
+		this.trustStorePassword = trustStorePassword;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public void setDescription(String description) {
+		this.description = description;
+	}
+
+	public String getCreatedBy() {
+		return createdBy;
+	}
+
+	public void setCreatedBy(String createdBy) {
+		this.createdBy = createdBy;
+	}
+
+	public String getCreatedDate() {
+		return createdDate;
+	}
+
+	public void setCreatedDate(String createdDate) {
+		this.createdDate = createdDate;
+	}
+
+	public String getModifiedBy() {
+		return modifiedBy;
+	}
+
+	public void setModifiedBy(String modifiedBy) {
+		this.modifiedBy = modifiedBy;
+	}
+
+	public String getModifiedDate() {
+		return modifiedDate;
+	}
+
+	public void setModifiedDate(String modifiedDate) {
+		this.modifiedDate = modifiedDate;
+	}
+
+	public int getStatus() {
+		return status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public String getInstId() {
+		return instId;
+	}
+
+	public void setInstId(String instId) {
+		this.instId = instId;
+	}
+
+	public String getInstName() {
+		return instName;
+	}
+
+	public void setInstName(String instName) {
+		this.instName = instName;
+	}
+
+	@Override
+	public String toString() {
+		StringBuilder builder = new StringBuilder();
+		builder.append("LdapContext [id=");
+		builder.append(id);
+		builder.append(", product=");
+		builder.append(product);
+		builder.append(", providerUrl=");
+		builder.append(providerUrl);
+		builder.append(", principal=");
+		builder.append(principal);
+		builder.append(", credentials=");
+		builder.append(credentials);
+		builder.append(", filters=");
+		builder.append(filters);
+		builder.append(", basedn=");
+		builder.append(basedn);
+		builder.append(", msadDomain=");
+		builder.append(msadDomain);
+		builder.append(", sslSwitch=");
+		builder.append(sslSwitch);
+		builder.append(", trustStore=");
+		builder.append(trustStore);
+		builder.append(", trustStorePassword=");
+		builder.append(trustStorePassword);
+		builder.append(", description=");
+		builder.append(description);
+		builder.append(", createdBy=");
+		builder.append(createdBy);
+		builder.append(", createdDate=");
+		builder.append(createdDate);
+		builder.append(", modifiedBy=");
+		builder.append(modifiedBy);
+		builder.append(", modifiedDate=");
+		builder.append(modifiedDate);
+		builder.append(", status=");
+		builder.append(status);
+		builder.append(", instId=");
+		builder.append(instId);
+		builder.append(", instName=");
+		builder.append(instName);
+		builder.append("]");
+		return builder.toString();
+	}
+
+}

+ 17 - 0
maxkey-core/src/main/java/org/maxkey/entity/Localization.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.entity;
 
 import java.io.Serializable;

+ 4 - 4
maxkey-core/src/main/java/org/maxkey/persistence/db/InstitutionService.java → maxkey-core/src/main/java/org/maxkey/persistence/repository/InstitutionsRepository.java

@@ -15,7 +15,7 @@
  */
  
 
-package org.maxkey.persistence.db;
+package org.maxkey.persistence.repository;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -34,8 +34,8 @@ import org.springframework.jdbc.core.RowMapper;
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.Caffeine;
 
-public class InstitutionService {
-    private static Logger _logger = LoggerFactory.getLogger(InstitutionService.class);
+public class InstitutionsRepository {
+    private static Logger _logger = LoggerFactory.getLogger(InstitutionsRepository.class);
     
     private static final String SELECT_STATEMENT = 
     						"select * from  mxk_institutions where domain = ? and status = " + ConstantsStatus.ACTIVE;
@@ -53,7 +53,7 @@ public class InstitutionService {
     
     protected JdbcTemplate jdbcTemplate;
     
-    public InstitutionService(JdbcTemplate jdbcTemplate) {
+    public InstitutionsRepository(JdbcTemplate jdbcTemplate) {
         this.jdbcTemplate = jdbcTemplate;
     }
         

+ 7 - 7
maxkey-core/src/main/java/org/maxkey/persistence/db/LocalizationService.java → maxkey-core/src/main/java/org/maxkey/persistence/repository/LocalizationRepository.java

@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.maxkey.persistence.db;
+package org.maxkey.persistence.repository;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -33,8 +33,8 @@ import org.springframework.jdbc.core.RowMapper;
 import com.github.benmanes.caffeine.cache.Cache;
 import com.github.benmanes.caffeine.cache.Caffeine;
 
-public class LocalizationService {
-	private static Logger _logger = LoggerFactory.getLogger(LocalizationService.class);
+public class LocalizationRepository {
+	private static Logger _logger = LoggerFactory.getLogger(LocalizationRepository.class);
 	private static final String INSERT_STATEMENT ="insert into mxk_localization (id, property,langzh,langen,status,description,instid)values(?,?,?,?,?,?,?)";
 	private static final String UPDATE_STATEMENT ="update mxk_localization set langzh = ? , langen =? where id = ?";
 	private static final String DELETE_STATEMENT ="delete from  mxk_localization where id = ?";
@@ -42,7 +42,7 @@ public class LocalizationService {
 	
 	private static final Pattern PATTERN_HTML = Pattern.compile("<[^>]+>", Pattern.CASE_INSENSITIVE);
 	 
-	protected InstitutionService institutionService;
+	protected InstitutionsRepository institutionService;
 	
 	JdbcTemplate jdbcTemplate;
 	
@@ -51,7 +51,7 @@ public class LocalizationService {
                 .expireAfterWrite(ConstantsTimeInterval.ONE_HOUR, TimeUnit.SECONDS)
                 .build();
 
-	public LocalizationService() {
+	public LocalizationRepository() {
 
 	}
 	
@@ -102,7 +102,7 @@ public class LocalizationService {
 		return message;
 	}
 	
-	public void setInstitutionService(InstitutionService institutionService) {
+	public void setInstitutionService(InstitutionsRepository institutionService) {
 		this.institutionService = institutionService;
 	}
 
@@ -133,7 +133,7 @@ public class LocalizationService {
 		return (localizations==null || localizations.size()==0) ? null : localizations.get(0);
 	}
 	
-	public LocalizationService(JdbcTemplate jdbcTemplate,InstitutionService institutionService) {
+	public LocalizationRepository(JdbcTemplate jdbcTemplate,InstitutionsRepository institutionService) {
 		super();
 		this.institutionService = institutionService;
 		this.jdbcTemplate = jdbcTemplate;

+ 4 - 4
maxkey-core/src/main/java/org/maxkey/persistence/db/LoginHistoryService.java → maxkey-core/src/main/java/org/maxkey/persistence/repository/LoginHistoryRepository.java

@@ -15,7 +15,7 @@
  */
  
 
-package org.maxkey.persistence.db;
+package org.maxkey.persistence.repository;
 
 import java.sql.Types;
 
@@ -25,8 +25,8 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.jdbc.core.JdbcTemplate;
 
-public class LoginHistoryService {
-    private static Logger _logger = LoggerFactory.getLogger(LoginHistoryService.class);
+public class LoginHistoryRepository {
+    private static Logger _logger = LoggerFactory.getLogger(LoginHistoryRepository.class);
     
     private static final String HISTORY_LOGIN_INSERT_STATEMENT = "insert into mxk_history_login (id , sessionid , userid , username , displayname , logintype , message , code , provider , sourceip , browser , platform , application , loginurl , sessionstatus ,instid)values( ? , ? , ? , ? , ? , ? , ?, ? , ? , ?, ? , ? , ?, ? , ? , ?)";
 
@@ -34,7 +34,7 @@ public class LoginHistoryService {
 
     protected JdbcTemplate jdbcTemplate;
     
-    public LoginHistoryService(JdbcTemplate jdbcTemplate) {
+    public LoginHistoryRepository(JdbcTemplate jdbcTemplate) {
         this.jdbcTemplate = jdbcTemplate;
     }
         

+ 5 - 5
maxkey-core/src/main/java/org/maxkey/persistence/db/LoginService.java → maxkey-core/src/main/java/org/maxkey/persistence/repository/LoginRepository.java

@@ -15,7 +15,7 @@
  */
  
 
-package org.maxkey.persistence.db;
+package org.maxkey.persistence.repository;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -35,8 +35,8 @@ import org.springframework.jdbc.core.RowMapper;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
 
-public class LoginService {
-    private static Logger _logger = LoggerFactory.getLogger(LoginService.class);
+public class LoginRepository {
+    private static Logger _logger = LoggerFactory.getLogger(LoginRepository.class);
 
     private static final String LOCK_USER_UPDATE_STATEMENT = "update mxk_userinfo set islocked = ?  , unlocktime = ? where id = ?";
 
@@ -69,11 +69,11 @@ public class LoginService {
      */
     public  static  int LOGIN_ATTRIBUTE_TYPE = 2;
     
-    public LoginService(){
+    public LoginRepository(){
         
     }
     
-    public LoginService(JdbcTemplate jdbcTemplate){
+    public LoginRepository(JdbcTemplate jdbcTemplate){
         this.jdbcTemplate=jdbcTemplate;
     }
     

+ 1 - 1
maxkey-core/src/main/java/org/maxkey/persistence/db/PasswordPolicyMessageResolver.java → maxkey-core/src/main/java/org/maxkey/persistence/repository/PasswordPolicyMessageResolver.java

@@ -15,7 +15,7 @@
  */
  
 
-package org.maxkey.persistence.db;
+package org.maxkey.persistence.repository;
 
 import java.util.Locale;
 

+ 185 - 0
maxkey-core/src/main/java/org/maxkey/persistence/repository/PasswordPolicyRepository.java

@@ -0,0 +1,185 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
+package org.maxkey.persistence.repository;
+
+import java.io.InputStreamReader;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
+
+import org.maxkey.constants.ConstantsProperties;
+import org.maxkey.entity.PasswordPolicy;
+import org.passay.CharacterOccurrencesRule;
+import org.passay.CharacterRule;
+import org.passay.DictionaryRule;
+import org.passay.EnglishCharacterData;
+import org.passay.EnglishSequenceData;
+import org.passay.IllegalSequenceRule;
+import org.passay.LengthRule;
+import org.passay.Rule;
+import org.passay.UsernameRule;
+import org.passay.WhitespaceRule;
+import org.passay.dictionary.Dictionary;
+import org.passay.dictionary.DictionaryBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.jdbc.core.RowMapper;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+
+public class PasswordPolicyRepository {
+    private static Logger _logger = LoggerFactory.getLogger(PasswordPolicyRepository.class);
+    
+    //Dictionary topWeakPassword Source
+    public static final String topWeakPasswordPropertySource      = 
+            "classpath:/top_weak_password.txt";
+    
+    //Cache PasswordPolicy in memory ONE_HOUR
+    protected static final Cache<String, PasswordPolicy> passwordPolicyStore = 
+            Caffeine.newBuilder()
+                .expireAfterWrite(60, TimeUnit.MINUTES)
+                .build();
+    
+    protected PasswordPolicy passwordPolicy;
+    
+    protected JdbcTemplate jdbcTemplate;
+    
+    ArrayList <Rule> passwordPolicyRuleList;
+
+    private static final String PASSWORD_POLICY_KEY = "PASSWORD_POLICY_KEY";
+    
+    private static final String PASSWORD_POLICY_SELECT_STATEMENT = "select * from mxk_password_policy ";
+
+    public PasswordPolicyRepository(JdbcTemplate jdbcTemplate) {
+        this.jdbcTemplate = jdbcTemplate;
+    }
+    
+    /**
+     * init PasswordPolicy and load Rules
+     * @return
+     */
+    public PasswordPolicy getPasswordPolicy() {
+        passwordPolicy = passwordPolicyStore.getIfPresent(PASSWORD_POLICY_KEY);
+       
+        if (passwordPolicy == null) {
+            passwordPolicy = jdbcTemplate.queryForObject(PASSWORD_POLICY_SELECT_STATEMENT,
+                    new PasswordPolicyRowMapper());
+            _logger.debug("query PasswordPolicy : " + passwordPolicy);
+            passwordPolicyStore.put(PASSWORD_POLICY_KEY,passwordPolicy);
+            
+            //RandomPasswordLength =(MaxLength +MinLength)/2
+            passwordPolicy.setRandomPasswordLength(
+                Math.round(
+                        (
+                                passwordPolicy.getMaxLength() + 
+                                passwordPolicy.getMinLength()
+                        )/2
+                   )
+            );
+            
+            passwordPolicyRuleList = new ArrayList<Rule>();
+            passwordPolicyRuleList.add(new WhitespaceRule());
+            passwordPolicyRuleList.add(new LengthRule(passwordPolicy.getMinLength(), passwordPolicy.getMaxLength()));
+            
+            if(passwordPolicy.getUpperCase()>0) {
+                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.UpperCase, passwordPolicy.getUpperCase()));
+            }
+            
+            if(passwordPolicy.getLowerCase()>0) {
+                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.LowerCase, passwordPolicy.getLowerCase()));
+            }
+            
+            if(passwordPolicy.getDigits()>0) {
+                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.Digit, passwordPolicy.getDigits()));
+            }
+            
+            if(passwordPolicy.getSpecialChar()>0) {
+                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.Special, passwordPolicy.getSpecialChar()));
+            }
+            
+            if(passwordPolicy.getUsername()>0) {
+                passwordPolicyRuleList.add(new UsernameRule());
+            }
+            
+            if(passwordPolicy.getOccurances()>0) {
+                passwordPolicyRuleList.add(new CharacterOccurrencesRule(passwordPolicy.getOccurances()));
+            }
+            
+            if(passwordPolicy.getAlphabetical()>0) {
+                passwordPolicyRuleList.add(new IllegalSequenceRule(EnglishSequenceData.Alphabetical, 4, false));
+            }
+            
+            if(passwordPolicy.getNumerical()>0) {
+                passwordPolicyRuleList.add(new IllegalSequenceRule(EnglishSequenceData.Numerical, 4, false));
+            }
+            
+            if(passwordPolicy.getQwerty()>0) {
+                passwordPolicyRuleList.add(new IllegalSequenceRule(EnglishSequenceData.USQwerty, 4, false));
+            }
+                        
+            if(passwordPolicy.getDictionary()>0 ) {
+                try {
+                    ClassPathResource dictFile= 
+                            new ClassPathResource(
+                                    ConstantsProperties.classPathResource(topWeakPasswordPropertySource));
+                    Dictionary dictionary =new DictionaryBuilder().addReader(new InputStreamReader(dictFile.getInputStream())).build();
+                    passwordPolicyRuleList.add(new DictionaryRule(dictionary));
+                }catch(Exception e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return passwordPolicy;
+    }
+  
+ 
+   public ArrayList<Rule> getPasswordPolicyRuleList() {
+		return passwordPolicyRuleList;
+	}
+
+
+public class PasswordPolicyRowMapper implements RowMapper<PasswordPolicy> {
+
+       @Override
+       public PasswordPolicy mapRow(ResultSet rs, int rowNum) throws SQLException {
+           PasswordPolicy passwordPolicy = new PasswordPolicy();
+           passwordPolicy.setId(rs.getString("ID"));
+           passwordPolicy.setMinLength(rs.getInt("MINLENGTH"));
+           passwordPolicy.setMaxLength(rs.getInt("MAXLENGTH"));
+           passwordPolicy.setLowerCase(rs.getInt("LOWERCASE"));
+           passwordPolicy.setUpperCase(rs.getInt("UPPERCASE"));
+           passwordPolicy.setDigits(rs.getInt("DIGITS"));
+           passwordPolicy.setSpecialChar(rs.getInt("SPECIALCHAR"));
+           passwordPolicy.setAttempts(rs.getInt("ATTEMPTS"));
+           passwordPolicy.setDuration(rs.getInt("DURATION"));
+           passwordPolicy.setExpiration(rs.getInt("EXPIRATION"));
+           passwordPolicy.setUsername(rs.getInt("USERNAME"));
+           passwordPolicy.setHistory(rs.getInt("HISTORY"));
+           passwordPolicy.setDictionary(rs.getInt("DICTIONARY"));
+           passwordPolicy.setAlphabetical(rs.getInt("ALPHABETICAL"));
+           passwordPolicy.setNumerical(rs.getInt("NUMERICAL"));
+           passwordPolicy.setQwerty(rs.getInt("QWERTY"));
+           passwordPolicy.setOccurances(rs.getInt("OCCURANCES"));
+           return passwordPolicy;
+       }
+
+   }
+}

+ 14 - 157
maxkey-core/src/main/java/org/maxkey/persistence/db/PasswordPolicyValidator.java → maxkey-core/src/main/java/org/maxkey/persistence/repository/PasswordPolicyValidator.java

@@ -15,21 +15,14 @@
  */
  
 
-package org.maxkey.persistence.db;
+package org.maxkey.persistence.repository;
 
-import java.io.InputStreamReader;
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.sql.Types;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.concurrent.TimeUnit;
-
 import org.joda.time.DateTime;
 import org.joda.time.Duration;
 import org.joda.time.format.DateTimeFormat;
 import org.maxkey.constants.ConstantsPasswordSetType;
-import org.maxkey.constants.ConstantsProperties;
 import org.maxkey.constants.ConstantsStatus;
 import org.maxkey.crypto.password.PasswordGen;
 import org.maxkey.entity.PasswordPolicy;
@@ -37,48 +30,19 @@ import org.maxkey.entity.UserInfo;
 import org.maxkey.util.StringUtils;
 import org.maxkey.web.WebConstants;
 import org.maxkey.web.WebContext;
-import org.passay.CharacterOccurrencesRule;
-import org.passay.CharacterRule;
-import org.passay.DictionaryRule;
-import org.passay.EnglishCharacterData;
-import org.passay.EnglishSequenceData;
-import org.passay.IllegalSequenceRule;
-import org.passay.LengthRule;
 import org.passay.PasswordData;
 import org.passay.PasswordValidator;
-import org.passay.Rule;
 import org.passay.RuleResult;
-import org.passay.UsernameRule;
-import org.passay.WhitespaceRule;
-import org.passay.dictionary.Dictionary;
-import org.passay.dictionary.DictionaryBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.MessageSource;
-import org.springframework.core.io.ClassPathResource;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
 import org.springframework.security.authentication.BadCredentialsException;
 
-import com.github.benmanes.caffeine.cache.Cache;
-import com.github.benmanes.caffeine.cache.Caffeine;
-
 public class PasswordPolicyValidator {
     private static Logger _logger = LoggerFactory.getLogger(PasswordPolicyValidator.class);
     
-    //Dictionary topWeakPassword Source
-    public static final String topWeakPasswordPropertySource      = 
-            "classpath:/top_weak_password.txt";
-    
-    //Cache PasswordPolicy in memory ONE_HOUR
-    protected static final Cache<String, PasswordPolicy> passwordPolicyStore = 
-            Caffeine.newBuilder()
-                .expireAfterWrite(60, TimeUnit.MINUTES)
-                .build();
-    
-    protected PasswordPolicy passwordPolicy;
-    
-    ArrayList <Rule> passwordPolicyRuleList;
+    PasswordPolicyRepository passwordPolicyRepository;
     
     protected JdbcTemplate jdbcTemplate;
     
@@ -86,12 +50,8 @@ public class PasswordPolicyValidator {
     
     public static final String PASSWORD_POLICY_VALIDATE_RESULT = "PASSWORD_POLICY_SESSION_VALIDATE_RESULT_KEY";
     
-    private static final String PASSWORD_POLICY_KEY = "PASSWORD_POLICY_KEY";
-    
     private static final String LOCK_USER_UPDATE_STATEMENT = "update mxk_userinfo set islocked = ?  , unlocktime = ? where id = ?";
 
-    private static final String PASSWORD_POLICY_SELECT_STATEMENT = "select * from mxk_password_policy ";
-
     private static final String UNLOCK_USER_UPDATE_STATEMENT = "update mxk_userinfo set islocked = ? , unlocktime = ? where id = ?";
 
     private static final String BADPASSWORDCOUNT_UPDATE_STATEMENT = "update mxk_userinfo set badpasswordcount = ? , badpasswordtime = ?  where id = ?";
@@ -104,84 +64,8 @@ public class PasswordPolicyValidator {
     public PasswordPolicyValidator(JdbcTemplate jdbcTemplate,MessageSource messageSource) {
         this.messageSource=messageSource;
         this.jdbcTemplate = jdbcTemplate;
-    }
-    
-    /**
-     * init PasswordPolicy and load Rules
-     * @return
-     */
-    public PasswordPolicy getPasswordPolicy() {
-        passwordPolicy = passwordPolicyStore.getIfPresent(PASSWORD_POLICY_KEY);
-       
-        if (passwordPolicy == null) {
-            passwordPolicy = jdbcTemplate.queryForObject(PASSWORD_POLICY_SELECT_STATEMENT,
-                    new PasswordPolicyRowMapper());
-            _logger.debug("query PasswordPolicy : " + passwordPolicy);
-            passwordPolicyStore.put(PASSWORD_POLICY_KEY,passwordPolicy);
-            
-            //RandomPasswordLength =(MaxLength +MinLength)/2
-            passwordPolicy.setRandomPasswordLength(
-                Math.round(
-                        (
-                                passwordPolicy.getMaxLength() + 
-                                passwordPolicy.getMinLength()
-                        )/2
-                   )
-            );
-            
-            passwordPolicyRuleList = new ArrayList<Rule>();
-            passwordPolicyRuleList.add(new WhitespaceRule());
-            passwordPolicyRuleList.add(new LengthRule(passwordPolicy.getMinLength(), passwordPolicy.getMaxLength()));
-            
-            if(passwordPolicy.getUpperCase()>0) {
-                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.UpperCase, passwordPolicy.getUpperCase()));
-            }
-            
-            if(passwordPolicy.getLowerCase()>0) {
-                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.LowerCase, passwordPolicy.getLowerCase()));
-            }
-            
-            if(passwordPolicy.getDigits()>0) {
-                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.Digit, passwordPolicy.getDigits()));
-            }
-            
-            if(passwordPolicy.getSpecialChar()>0) {
-                passwordPolicyRuleList.add(new CharacterRule(EnglishCharacterData.Special, passwordPolicy.getSpecialChar()));
-            }
-            
-            if(passwordPolicy.getUsername()>0) {
-                passwordPolicyRuleList.add(new UsernameRule());
-            }
-            
-            if(passwordPolicy.getOccurances()>0) {
-                passwordPolicyRuleList.add(new CharacterOccurrencesRule(passwordPolicy.getOccurances()));
-            }
-            
-            if(passwordPolicy.getAlphabetical()>0) {
-                passwordPolicyRuleList.add(new IllegalSequenceRule(EnglishSequenceData.Alphabetical, 4, false));
-            }
-            
-            if(passwordPolicy.getNumerical()>0) {
-                passwordPolicyRuleList.add(new IllegalSequenceRule(EnglishSequenceData.Numerical, 4, false));
-            }
-            
-            if(passwordPolicy.getQwerty()>0) {
-                passwordPolicyRuleList.add(new IllegalSequenceRule(EnglishSequenceData.USQwerty, 4, false));
-            }
-                        
-            if(passwordPolicy.getDictionary()>0 ) {
-                try {
-                    ClassPathResource dictFile= 
-                            new ClassPathResource(
-                                    ConstantsProperties.classPathResource(topWeakPasswordPropertySource));
-                    Dictionary dictionary =new DictionaryBuilder().addReader(new InputStreamReader(dictFile.getInputStream())).build();
-                    passwordPolicyRuleList.add(new DictionaryRule(dictionary));
-                }catch(Exception e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-        return passwordPolicy;
+        this.passwordPolicyRepository = new PasswordPolicyRepository(jdbcTemplate);
+        
     }
     
     /**
@@ -200,10 +84,8 @@ public class PasswordPolicyValidator {
            return false;
        }
        
-       getPasswordPolicy();
-
        PasswordValidator validator = new PasswordValidator(
-               new PasswordPolicyMessageResolver(messageSource),passwordPolicyRuleList);
+               new PasswordPolicyMessageResolver(messageSource),passwordPolicyRepository.getPasswordPolicyRuleList());
        
        RuleResult result = validator.validate(new PasswordData(username,password));
        
@@ -230,8 +112,8 @@ public class PasswordPolicyValidator {
     */
    public boolean passwordPolicyValid(UserInfo userInfo) {
        
-       getPasswordPolicy();
-       
+	   PasswordPolicy passwordPolicy = passwordPolicyRepository.getPasswordPolicy();
+	   
        DateTime currentdateTime = new DateTime();
         /*
          * check login attempts fail times
@@ -285,7 +167,8 @@ public class PasswordPolicyValidator {
     }
    
    public void applyPasswordPolicy(UserInfo userInfo) {
-       getPasswordPolicy();
+	   PasswordPolicy passwordPolicy = passwordPolicyRepository.getPasswordPolicy();
+	   
        DateTime currentdateTime = new DateTime();
        //initial password need change
        if(userInfo.getLoginCount()<=0) {
@@ -417,7 +300,8 @@ public class PasswordPolicyValidator {
    }
    
    public String generateRandomPassword() {
-       getPasswordPolicy();
+       PasswordPolicy passwordPolicy = passwordPolicyRepository.getPasswordPolicy();
+       
        PasswordGen passwordGen = new PasswordGen(
                passwordPolicy.getRandomPasswordLength()
        );
@@ -428,36 +312,9 @@ public class PasswordPolicyValidator {
                passwordPolicy.getDigits(), 
                passwordPolicy.getSpecialChar());
    }
-   
-   public void setPasswordPolicy(PasswordPolicy passwordPolicy) {
-    this.passwordPolicy = passwordPolicy;
-   }
 
- 
-   public class PasswordPolicyRowMapper implements RowMapper<PasswordPolicy> {
+	public PasswordPolicyRepository getPasswordPolicyRepository() {
+		return passwordPolicyRepository;
+	}
 
-       @Override
-       public PasswordPolicy mapRow(ResultSet rs, int rowNum) throws SQLException {
-           PasswordPolicy passwordPolicy = new PasswordPolicy();
-           passwordPolicy.setId(rs.getString("ID"));
-           passwordPolicy.setMinLength(rs.getInt("MINLENGTH"));
-           passwordPolicy.setMaxLength(rs.getInt("MAXLENGTH"));
-           passwordPolicy.setLowerCase(rs.getInt("LOWERCASE"));
-           passwordPolicy.setUpperCase(rs.getInt("UPPERCASE"));
-           passwordPolicy.setDigits(rs.getInt("DIGITS"));
-           passwordPolicy.setSpecialChar(rs.getInt("SPECIALCHAR"));
-           passwordPolicy.setAttempts(rs.getInt("ATTEMPTS"));
-           passwordPolicy.setDuration(rs.getInt("DURATION"));
-           passwordPolicy.setExpiration(rs.getInt("EXPIRATION"));
-           passwordPolicy.setUsername(rs.getInt("USERNAME"));
-           passwordPolicy.setHistory(rs.getInt("HISTORY"));
-           passwordPolicy.setDictionary(rs.getInt("DICTIONARY"));
-           passwordPolicy.setAlphabetical(rs.getInt("ALPHABETICAL"));
-           passwordPolicy.setNumerical(rs.getInt("NUMERICAL"));
-           passwordPolicy.setQwerty(rs.getInt("QWERTY"));
-           passwordPolicy.setOccurances(rs.getInt("OCCURANCES"));
-           return passwordPolicy;
-       }
-
-   }
 }

+ 18 - 18
maxkey-core/src/main/java/org/maxkey/web/SessionListenerAdapter.java

@@ -24,8 +24,8 @@ import javax.servlet.http.HttpSessionListener;
 
 import org.apache.mybatis.jpa.util.WebContext;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
 import org.maxkey.util.DateUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,26 +35,26 @@ public class SessionListenerAdapter implements HttpSessionListener {
 
     private static final Logger _logger = LoggerFactory.getLogger(SessionListenerAdapter.class);
     
-    LoginService loginService;
+    LoginRepository loginRepository;
     
-    LoginHistoryService loginHistoryService;
+    LoginHistoryRepository loginHistoryRepository;
     
     public SessionListenerAdapter() {
         super();
         _logger.debug("SessionListenerAdapter inited . ");
     }
 
-    public SessionListenerAdapter(LoginService loginService, LoginHistoryService loginHistoryService) {
+    public SessionListenerAdapter(LoginRepository loginRepository, LoginHistoryRepository loginHistoryRepository) {
         super();
-        this.loginService = loginService;
-        this.loginHistoryService = loginHistoryService;
+        this.loginRepository = loginRepository;
+        this.loginHistoryRepository = loginHistoryRepository;
         _logger.debug("SessionListenerAdapter inited . ");
     }
 
     public void init() {
-        if(loginService == null ) {
-            loginService = (LoginService)WebContext.getBean("loginService");
-            loginHistoryService = (LoginHistoryService)WebContext.getBean("loginHistoryService");
+        if(loginRepository == null ) {
+        	loginRepository = (LoginRepository)WebContext.getBean("loginRepository");
+        	loginHistoryRepository = (LoginHistoryRepository)WebContext.getBean("loginHistoryRepository");
             _logger.debug("SessionListenerAdapter function inited . ");
         }
     }
@@ -78,8 +78,8 @@ public class SessionListenerAdapter implements HttpSessionListener {
             init();
             UserInfo userInfo = (UserInfo)session.getAttribute(WebConstants.CURRENT_USER);
             userInfo.setLastLogoffTime(DateUtils.formatDateTime(new Date()));
-            loginService.updateLastLogoff(userInfo);
-            loginHistoryService.logoff(userInfo.getLastLogoffTime(), sessionIdAttribute.toString());
+            loginRepository.updateLastLogoff(userInfo);
+            loginHistoryRepository.logoff(userInfo.getLastLogoffTime(), sessionIdAttribute.toString());
             
             _logger.debug(
                     "session {} Destroyed as {} userId : {} , username : {}" ,
@@ -91,12 +91,12 @@ public class SessionListenerAdapter implements HttpSessionListener {
         
     }
 
-    public void setLoginService(LoginService loginService) {
-        this.loginService = loginService;
-    }
+	public void setLoginRepository(LoginRepository loginRepository) {
+		this.loginRepository = loginRepository;
+	}
 
-    public void setLoginHistoryService(LoginHistoryService loginHistoryService) {
-        this.loginHistoryService = loginHistoryService;
-    }
+	public void setLoginHistoryRepository(LoginHistoryRepository loginHistoryRepository) {
+		this.loginHistoryRepository = loginHistoryRepository;
+	}
 
 }

+ 5 - 5
maxkey-core/src/main/java/org/maxkey/web/WebInstRequestFilter.java

@@ -29,7 +29,7 @@ import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.lang3.StringUtils;
 import org.maxkey.configuration.ApplicationConfig;
 import org.maxkey.entity.Institutions;
-import org.maxkey.persistence.db.InstitutionService;
+import org.maxkey.persistence.repository.InstitutionsRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.web.filter.GenericFilterBean;
@@ -39,7 +39,7 @@ public class WebInstRequestFilter  extends GenericFilterBean {
 	
 	public final static String  HEADER_HOST = "host";
 	
-	InstitutionService institutionService;
+	InstitutionsRepository institutionsRepository;
 	
 	ApplicationConfig applicationConfig;
 	
@@ -58,7 +58,7 @@ public class WebInstRequestFilter  extends GenericFilterBean {
 			if(host.indexOf(":")> -1 ) {
 				host = host.split(":")[0];
 			}
-			Institutions institution =institutionService.findByDomain(host);
+			Institutions institution =institutionsRepository.findByDomain(host);
 			_logger.trace("{}" ,institution);
 			request.getSession().setAttribute(WebConstants.CURRENT_INST, institution);
 			WebContext.setCookie((HttpServletResponse)servletResponse, host, WebConstants.INST_COOKIE_NAME, institution.getId());
@@ -66,9 +66,9 @@ public class WebInstRequestFilter  extends GenericFilterBean {
         chain.doFilter(servletRequest, servletResponse);
 	}
 
-	public WebInstRequestFilter(InstitutionService institutionService,ApplicationConfig applicationConfig) {
+	public WebInstRequestFilter(InstitutionsRepository institutionsRepository,ApplicationConfig applicationConfig) {
 		super();
-		this.institutionService = institutionService;
+		this.institutionsRepository = institutionsRepository;
 		this.applicationConfig = applicationConfig;
 	}
 

+ 2 - 2
maxkey-core/src/main/java/org/maxkey/web/tag/LocaleTagDirective.java

@@ -26,7 +26,7 @@ import java.io.IOException;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 
-import org.maxkey.persistence.db.LocalizationService;
+import org.maxkey.persistence.repository.LocalizationRepository;
 import org.maxkey.web.WebContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -51,7 +51,7 @@ public class LocaleTagDirective implements TemplateDirectiveModel {
     private HttpServletRequest request;
     
     @Autowired
-    LocalizationService localizationService;
+    LocalizationRepository localizationService;
 
     @SuppressWarnings("rawtypes")
     @Override

+ 17 - 0
maxkey-gataway/src/main/java/org/gateway/GatewayApplication.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.gateway;
 
 import org.springframework.boot.SpringApplication;

+ 17 - 0
maxkey-gataway/src/main/java/org/gateway/controller/FallbackController.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.gateway.controller;
 
 import org.springframework.web.bind.annotation.RequestMapping;

+ 17 - 0
maxkey-gataway/src/main/java/org/gateway/filter/AuthAndLogFilter.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.gateway.filter;
 
 import org.slf4j.Logger;

+ 17 - 0
maxkey-gataway/src/main/java/org/gateway/route/NacosDynamicRouteService.java

@@ -1,4 +1,21 @@
 /*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
+/*
 package org.gateway.route;
 
 import com.alibaba.fastjson.JSONObject;

+ 17 - 0
maxkey-identitys/maxkey-identity-scim/src/main/java/org/maxkey/identity/scim/resources/ScimParameters.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.identity.scim.resources;
 
 import org.maxkey.identity.scim.controller.ScimServiceProviderConfigController;

+ 1 - 1
maxkey-persistence/src/main/java/org/maxkey/persistence/service/UserInfoService.java

@@ -24,11 +24,11 @@ import org.maxkey.crypto.password.PasswordReciprocal;
 import org.maxkey.entity.Accounts;
 import org.maxkey.entity.ChangePassword;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
 import org.maxkey.persistence.kafka.KafkaIdentityAction;
 import org.maxkey.persistence.kafka.KafkaIdentityTopic;
 import org.maxkey.persistence.kafka.KafkaPersistService;
 import org.maxkey.persistence.mapper.UserInfoMapper;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.util.DateUtils;
 import org.maxkey.util.StringUtils;
 import org.maxkey.web.WebContext;

+ 9 - 10
maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/authz/oauth2/provider/OAuth2UserDetailsService.java

@@ -18,7 +18,7 @@ import org.maxkey.authn.AbstractAuthenticationProvider;
 import org.maxkey.authn.SigninPrincipal;
 import org.maxkey.authn.online.OnlineTicket;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.LoginService;
+import org.maxkey.persistence.repository.LoginRepository;
 import org.maxkey.web.WebConstants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,18 +35,12 @@ public class OAuth2UserDetailsService implements UserDetailsService {
 	 private static final Logger _logger = 
 	            LoggerFactory.getLogger(OAuth2UserDetailsService.class);
 	
-    LoginService loginService;
+    LoginRepository loginRepository;
 	
-
-	public void setLoginService(LoginService loginService) {
-        this.loginService = loginService;
-    }
-
-
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
 		UserInfo userInfo;
 		try {
-		    userInfo = loginService.find(username, "");
+		    userInfo = loginRepository.find(username, "");
 		} catch (NoSuchClientException e) {
 			throw new UsernameNotFoundException(e.getMessage(), e);
 		}
@@ -58,7 +52,7 @@ public class OAuth2UserDetailsService implements UserDetailsService {
 		//set OnlineTicket
         signinPrincipal.setOnlineTicket(onlineTicket);
         
-        ArrayList<GrantedAuthority> grantedAuthoritys = loginService.grantAuthority(userInfo);
+        ArrayList<GrantedAuthority> grantedAuthoritys = loginRepository.grantAuthority(userInfo);
         signinPrincipal.setAuthenticated(true);
         
         for(GrantedAuthority administratorsAuthority : AbstractAuthenticationProvider.grantedAdministratorsAuthoritys) {
@@ -74,4 +68,9 @@ public class OAuth2UserDetailsService implements UserDetailsService {
 		return signinPrincipal;
 	}
 
+	public void setLoginRepository(LoginRepository loginRepository) {
+		this.loginRepository = loginRepository;
+	}
+
+    
 }

+ 3 - 3
maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/autoconfigure/Oauth20AutoConfiguration.java

@@ -43,8 +43,8 @@ import org.maxkey.configuration.oidc.OIDCProviderMetadataDetails;
 import org.maxkey.crypto.jose.keystore.JWKSetKeyStore;
 import org.maxkey.crypto.jwt.encryption.service.impl.DefaultJwtEncryptionAndDecryptionService;
 import org.maxkey.crypto.jwt.signer.service.impl.DefaultJwtSigningAndValidationService;
-import org.maxkey.persistence.db.LoginService;
 import org.maxkey.persistence.redis.RedisConnectionFactory;
+import org.maxkey.persistence.repository.LoginRepository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
@@ -303,11 +303,11 @@ public class Oauth20AutoConfiguration implements InitializingBean {
     @Bean(name = "oauth20UserAuthenticationManager")
     public ProviderManager oauth20UserAuthenticationManager(
             PasswordEncoder passwordEncoder,
-            LoginService loginService
+            LoginRepository loginRepository
             ) {
         
         OAuth2UserDetailsService userDetailsService =new OAuth2UserDetailsService();
-        userDetailsService.setLoginService(loginService);
+        userDetailsService.setLoginRepository(loginRepository);
         
         DaoAuthenticationProvider daoAuthenticationProvider= new DaoAuthenticationProvider();
         daoAuthenticationProvider.setPasswordEncoder(passwordEncoder);

+ 17 - 0
maxkey-webs/maxkey-boot-monitor/src/main/java/org/maxkey/boot/monitor/MaxKeyBootMonitor.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.boot.monitor;
 
 import org.slf4j.Logger;

+ 17 - 0
maxkey-webs/maxkey-boot-monitor/src/main/java/org/maxkey/boot/monitor/MonitorSecurityConfigurer.java

@@ -1,3 +1,20 @@
+/*
+ * Copyright [2022] [MaxKey of copyright http://www.maxkey.top]
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ 
+
 package org.maxkey.boot.monitor;
 
 import org.springframework.context.annotation.Configuration;

+ 5 - 5
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/MaxKeyConfig.java

@@ -45,12 +45,12 @@ import org.maxkey.password.onetimepwd.impl.sms.SmsOtpAuthnAliyun;
 import org.maxkey.password.onetimepwd.impl.sms.SmsOtpAuthnTencentCloud;
 import org.maxkey.password.onetimepwd.impl.sms.SmsOtpAuthnYunxin;
 import org.maxkey.password.onetimepwd.token.RedisOtpTokenStore;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
 import org.maxkey.persistence.ldap.ActiveDirectoryUtils;
 import org.maxkey.persistence.ldap.LdapUtils;
 import org.maxkey.persistence.redis.RedisConnectionFactory;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.persistence.service.UserInfoService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -152,8 +152,8 @@ public class MaxKeyConfig  implements InitializingBean {
     public JdbcAuthenticationRealm authenticationRealm(
     			PasswordEncoder passwordEncoder,
 	    		PasswordPolicyValidator passwordPolicyValidator,
-	    		LoginService loginService,
-	    		LoginHistoryService loginHistoryService,
+	    		LoginRepository loginService,
+	    		LoginHistoryRepository loginHistoryService,
 	    		AbstractRemeberMeService remeberMeService,
 	    		UserInfoService userInfoService,
                 JdbcTemplate jdbcTemplate,

+ 1 - 1
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/ForgotPasswordContorller.java

@@ -22,7 +22,7 @@ import java.util.regex.Pattern;
 import org.maxkey.configuration.EmailConfig;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.web.WebConstants;
 import org.maxkey.web.WebContext;

+ 1 - 1
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/SafeController.java

@@ -25,7 +25,7 @@ import org.maxkey.constants.ConstantsPasswordSetType;
 import org.maxkey.constants.ConstantsTimeInterval;
 import org.maxkey.crypto.password.PasswordReciprocal;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.util.StringUtils;
 import org.maxkey.web.WebConstants;

+ 6 - 6
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java

@@ -24,8 +24,8 @@ import org.maxkey.authn.online.OnlineTicketServices;
 import org.maxkey.constants.ConstantsOperateMessage;
 import org.maxkey.entity.HistoryLogin;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
 import org.maxkey.persistence.service.HistoryLoginService;
 import org.maxkey.util.DateUtils;
 import org.maxkey.util.StringUtils;
@@ -60,10 +60,10 @@ public class LoginSessionController {
     @Autowired
     HistoryLoginService historyLoginService;
     @Autowired
-    LoginService loginService;
+    LoginRepository loginRepository;
     
     @Autowired
-    LoginHistoryService loginHistoryService;
+    LoginHistoryRepository loginHistoryRepository;
     
     @Autowired
     OnlineTicketServices onlineTicketServices;
@@ -108,8 +108,8 @@ public class LoginSessionController {
                 }
                 UserInfo userInfo = WebContext.getUserInfo();
                 String lastLogoffTime = DateUtils.formatDateTime(new Date());
-                loginService.updateLastLogoff(userInfo);
-                loginHistoryService.logoff(lastLogoffTime, sessionId);
+                loginRepository.updateLastLogoff(userInfo);
+                loginHistoryRepository.logoff(lastLogoffTime, sessionId);
                 onlineTicketServices.remove("OT-" + sessionId);
             }
             isTerminated = true;

+ 7 - 7
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtConfig.java

@@ -19,9 +19,9 @@ package org.maxkey;
 
 import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
 import org.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
-import org.maxkey.persistence.db.PasswordPolicyValidator;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
+import org.maxkey.persistence.repository.PasswordPolicyValidator;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm;
 import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
@@ -42,8 +42,8 @@ public class MaxKeyMgtConfig  implements InitializingBean {
 	public JdbcAuthenticationRealm authenticationRealm(
  			PasswordEncoder passwordEncoder,
 	    		PasswordPolicyValidator passwordPolicyValidator,
-	    		LoginService loginService,
-	    		LoginHistoryService loginHistoryService,
+	    		LoginRepository loginRepository,
+	    		LoginHistoryRepository loginHistoryRepository,
 	    		AbstractRemeberMeService remeberMeService,
 	    		UserInfoService userInfoService,
              JdbcTemplate jdbcTemplate) {
@@ -51,8 +51,8 @@ public class MaxKeyMgtConfig  implements InitializingBean {
         JdbcAuthenticationRealm authenticationRealm = new JdbcAuthenticationRealm(
         		passwordEncoder,
         		passwordPolicyValidator,
-        		loginService,
-        		loginHistoryService,
+        		loginRepository,
+        		loginHistoryRepository,
         		remeberMeService,
         		userInfoService,
         		jdbcTemplate);

+ 5 - 5
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/LocalizationController.java

@@ -20,7 +20,7 @@ package org.maxkey.web.contorller;
 import org.apache.commons.lang3.StringUtils;
 import org.maxkey.constants.ConstantsOperateMessage;
 import org.maxkey.entity.Localization;
-import org.maxkey.persistence.db.LocalizationService;
+import org.maxkey.persistence.repository.LocalizationRepository;
 import org.maxkey.web.WebContext;
 import org.maxkey.web.message.Message;
 import org.maxkey.web.message.MessageType;
@@ -43,7 +43,7 @@ public class LocalizationController {
 		final static Logger _logger = LoggerFactory.getLogger(LocalizationController.class);
 		
 		@Autowired
-		private LocalizationService localizationService;
+		private LocalizationRepository localizationRepository;
 		
 		/**
 		 * 读取
@@ -51,7 +51,7 @@ public class LocalizationController {
 		 */
 		@RequestMapping(value={"/forward/{property}"})
 		public ModelAndView forward(@PathVariable("property") String property){
-			Localization localization = localizationService.get(property,WebContext.getUserInfo().getInstId());
+			Localization localization = localizationRepository.get(property,WebContext.getUserInfo().getInstId());
 			if(localization == null )localization = new Localization();
 			localization.setProperty(property);
 			localization.setInstId(WebContext.getUserInfo().getInstId());
@@ -70,13 +70,13 @@ public class LocalizationController {
 			localization.setInstId(WebContext.getUserInfo().getInstId());
 			if(StringUtils.isBlank(localization.getId())){
 				localization.setId(localization.generateId());
-				if(localizationService.insert(localization)) {
+				if(localizationRepository.insert(localization)) {
 					return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_SUCCESS),MessageType.success);
 				} else {
 					return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_ERROR),MessageType.error);
 				}
 			}else {
-				if(localizationService.update(localization)) {
+				if(localizationRepository.update(localization)) {
 					return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_SUCCESS),MessageType.success);
 				} else {
 					return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_ERROR),MessageType.error);

+ 6 - 6
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java

@@ -24,8 +24,8 @@ import org.maxkey.authn.online.OnlineTicketServices;
 import org.maxkey.constants.ConstantsOperateMessage;
 import org.maxkey.entity.HistoryLogin;
 import org.maxkey.entity.UserInfo;
-import org.maxkey.persistence.db.LoginHistoryService;
-import org.maxkey.persistence.db.LoginService;
+import org.maxkey.persistence.repository.LoginHistoryRepository;
+import org.maxkey.persistence.repository.LoginRepository;
 import org.maxkey.persistence.service.HistoryLoginService;
 import org.maxkey.util.DateUtils;
 import org.maxkey.util.StringUtils;
@@ -60,10 +60,10 @@ public class LoginSessionController {
     @Autowired
     HistoryLoginService historyLoginService;
     @Autowired
-    LoginService loginService;
+    LoginRepository loginRepository;
     
     @Autowired
-    LoginHistoryService loginHistoryService;
+    LoginHistoryRepository loginHistoryRepository;
     
     @Autowired
     OnlineTicketServices onlineTicketServices;
@@ -106,8 +106,8 @@ public class LoginSessionController {
                 }
                 UserInfo userInfo = WebContext.getUserInfo();
                 String lastLogoffTime = DateUtils.formatDateTime(new Date());
-                loginService.updateLastLogoff(userInfo);
-                loginHistoryService.logoff(lastLogoffTime, sessionId);
+                loginRepository.updateLastLogoff(userInfo);
+                loginHistoryRepository.logoff(lastLogoffTime, sessionId);
                 onlineTicketServices.remove("OT-" + sessionId);
             }
             isTerminated = true;