diff --git a/maxkey-core/src/main/java/org/maxkey/web/BasicController.java b/maxkey-core/src/main/java/org/maxkey/web/BasicController.java deleted file mode 100644 index bb144854..00000000 --- a/maxkey-core/src/main/java/org/maxkey/web/BasicController.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright [2020] [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.web; - -import org.apache.mybatis.jpa.persistence.JpaBaseEntity; -import org.apache.mybatis.jpa.persistence.JpaPageResults; -import org.maxkey.web.message.Message; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.servlet.ModelAndView; - -public interface BasicController { - - public JpaPageResults pageResults(@ModelAttribute("modelAttribute") T modelAttribute); - - public ModelAndView forwardAdd(@ModelAttribute("modelAttribute") T modelAttribute); - - public Message insert(@ModelAttribute("modelAttribute") T modelAttribute); - - public ModelAndView forwardUpdate(@PathVariable("id") String id); - - public Message update(@ModelAttribute("modelAttribute") T modelAttribute); - - public Message delete(@ModelAttribute("modelAttribute") T modelAttribute) ; - - -} diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/AccountsMapper.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/AccountsMapper.java index 463f7bc1..bce088c4 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/AccountsMapper.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/mapper/AccountsMapper.java @@ -20,8 +20,12 @@ */ package org.maxkey.persistence.mapper; +import java.util.List; + import org.apache.mybatis.jpa.persistence.IJpaBaseMapper; import org.maxkey.entity.Accounts; +import org.maxkey.entity.AccountsStrategy; +import org.maxkey.entity.UserInfo; /** * @author Crystal.sea @@ -30,4 +34,7 @@ import org.maxkey.entity.Accounts; public interface AccountsMapper extends IJpaBaseMapper { + public List queryUserNotInStrategy(AccountsStrategy strategy); + + public long deleteByStrategy(AccountsStrategy strategy); } diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/AccountsService.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/AccountsService.java index 5f40816b..87e3b5b1 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/AccountsService.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/AccountsService.java @@ -17,13 +17,19 @@ package org.maxkey.persistence.service; +import java.util.List; + import org.apache.mybatis.jpa.persistence.JpaBaseService; +import org.maxkey.constants.ConstantsStatus; +import org.maxkey.crypto.ReciprocalUtils; import org.maxkey.entity.Accounts; +import org.maxkey.entity.AccountsStrategy; import org.maxkey.entity.UserInfo; import org.maxkey.persistence.kafka.KafkaIdentityAction; import org.maxkey.persistence.kafka.KafkaIdentityTopic; import org.maxkey.persistence.kafka.KafkaPersistService; import org.maxkey.persistence.mapper.AccountsMapper; +import org.maxkey.util.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -36,6 +42,9 @@ public class AccountsService extends JpaBaseService{ @Autowired UserInfoService userInfoService; + @Autowired + AccountsStrategyService accountsStrategyService; + public AccountsService() { super(AccountsMapper.class); } @@ -99,5 +108,59 @@ public class AccountsService extends JpaBaseService{ } return false; } + + public void refreshByStrategy(AccountsStrategy strategy) { + if(StringUtils.isNotBlank(strategy.getOrgIdsList())) { + strategy.setOrgIdsList("'"+strategy.getOrgIdsList().replace(",", "','")+"'"); + } + List userList = queryUserNotInStrategy(strategy); + for(UserInfo user : userList) { + Accounts account = new Accounts(); + account.setAppId(strategy.getAppId()); + account.setAppName(strategy.getAppName()); + + account.setUserId(user.getId()); + account.setUsername(user.getUsername()); + account.setDisplayName(user.getDisplayName()); + + if(strategy.getMapping().equalsIgnoreCase("username")) { + account.setRelatedUsername(user.getUsername()); + }else if(strategy.getMapping().equalsIgnoreCase("mobile")) { + account.setRelatedUsername(user.getMobile()); + }else if(strategy.getMapping().equalsIgnoreCase("email")) { + account.setRelatedUsername(user.getEmail()); + }else if(strategy.getMapping().equalsIgnoreCase("employeeNumber")) { + account.setRelatedUsername(user.getEmployeeNumber()); + }else if(strategy.getMapping().equalsIgnoreCase("windowsAccount")) { + account.setRelatedUsername(user.getWindowsAccount()); + }else if(strategy.getMapping().equalsIgnoreCase("idCardNo")) { + account.setRelatedUsername(user.getIdCardNo()); + }else { + account.setRelatedUsername(user.getUsername()); + } + account.setRelatedPassword(ReciprocalUtils.encode(userInfoService.randomPassword())); + + account.setCreateType("automatic"); + account.setStatus(ConstantsStatus.ACTIVE); + account.setStrategyId(strategy.getId()); + + insert(account); + } + deleteByStrategy(strategy); + } + public void refreshAllByStrategy() { + for( AccountsStrategy strategy : accountsStrategyService.query(null)) { + refreshByStrategy(strategy); + } + } + + + public List queryUserNotInStrategy(AccountsStrategy strategy){ + return getMapper().queryUserNotInStrategy(strategy); + } + + public long deleteByStrategy(AccountsStrategy strategy) { + return getMapper().deleteByStrategy(strategy); + } } diff --git a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java index 5aba03d2..6a3ca10e 100644 --- a/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java +++ b/maxkey-persistence/src/main/java/org/maxkey/persistence/service/GroupsService.java @@ -23,6 +23,7 @@ import java.time.LocalTime; import java.util.List; import org.apache.mybatis.jpa.persistence.JpaBaseService; +import org.maxkey.constants.ConstantsStatus; import org.maxkey.entity.Groups; import org.maxkey.persistence.mapper.GroupsMapper; import org.maxkey.util.StringUtils; @@ -72,7 +73,7 @@ public class GroupsService extends JpaBaseService implements Serializab } public void refreshDynamicGroups(Groups dynamicGroup){ - if(dynamicGroup.getDynamic().equals("1")) { + if(dynamicGroup.getDynamic().equals(ConstantsStatus.ACTIVE)) { boolean isDynamicTimeSupport = false; boolean isBetweenEffectiveTime = false; if(StringUtils.isNotBlank(dynamicGroup.getResumeTime()) @@ -119,6 +120,14 @@ public class GroupsService extends JpaBaseService implements Serializab } } } + + public void refreshAllDynamicGroups(){ + List groupsList = queryDynamicGroups(null); + for(Groups group : groupsList) { + _logger.debug("group " + group); + refreshDynamicGroups(group); + } + } public GroupMemberService getGroupMemberService() { return groupMemberService; diff --git a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/AccountsMapper.xml b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/AccountsMapper.xml index 89d889d9..4a04af62 100644 --- a/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/AccountsMapper.xml +++ b/maxkey-persistence/src/main/resources/org/maxkey/persistence/mapper/xml/mysql/AccountsMapper.xml @@ -29,4 +29,40 @@ + + + + delete from mxk_accounts ac + where ac.createtype = 'automatic' + and ac.appid = #{appId} + and ac.strategyid = #{id} + and not exists( + select 1 + from mxk_userinfo u + where 1 = 1 + and u.id=ac.userid + + and (${filters}) + + + and u.departmentid in ( ${orgIdsList}) + + ) + \ No newline at end of file diff --git a/maxkey-protocols/maxkey-protocol-authorize/src/main/java/org/maxkey/authz/singlelogout/LogoutType.java b/maxkey-protocols/maxkey-protocol-authorize/src/main/java/org/maxkey/authz/singlelogout/LogoutType.java index d58eb421..0055e570 100644 --- a/maxkey-protocols/maxkey-protocol-authorize/src/main/java/org/maxkey/authz/singlelogout/LogoutType.java +++ b/maxkey-protocols/maxkey-protocol-authorize/src/main/java/org/maxkey/authz/singlelogout/LogoutType.java @@ -22,14 +22,14 @@ public class LogoutType { /** * For no SLO. */ - public static int NONE = 0; + public static int NONE = 0; /** * For back channel SLO. */ - public static int BACK_CHANNEL = 1; + public static int BACK_CHANNEL = 1; /** * For front channel SLO. */ - public static int FRONT_CHANNEL = 2; + public static int FRONT_CHANNEL = 2; } diff --git a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas20AuthorizeEndpoint.java b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas20AuthorizeEndpoint.java index 8c5b0339..e87ea1ce 100644 --- a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas20AuthorizeEndpoint.java +++ b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas20AuthorizeEndpoint.java @@ -34,6 +34,7 @@ import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter; import org.maxkey.constants.Boolean; import org.maxkey.entity.UserInfo; import org.maxkey.util.Instance; +import org.maxkey.util.StringUtils; import org.maxkey.web.HttpResponseConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -205,7 +206,7 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message String principal=authentication.getUsername(); _logger.debug("principal "+principal); serviceResponseBuilder.success().setUser(principal); - if(pgtUrl != null && !pgtUrl.equalsIgnoreCase("")) { + if(StringUtils.isNotBlank(pgtUrl)) { ProxyGrantingTicketIOUImpl proxyGrantingTicketIOUImpl =new ProxyGrantingTicketIOUImpl(); String proxyGrantingTicketIOU=casProxyGrantingTicketServices.createTicket(proxyGrantingTicketIOUImpl); diff --git a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas30AuthorizeEndpoint.java b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas30AuthorizeEndpoint.java index 8a5d1b22..acf87b06 100644 --- a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas30AuthorizeEndpoint.java +++ b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/Cas30AuthorizeEndpoint.java @@ -35,6 +35,7 @@ import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter; import org.maxkey.constants.Boolean; import org.maxkey.entity.UserInfo; import org.maxkey.util.Instance; +import org.maxkey.util.StringUtils; import org.maxkey.web.HttpResponseConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,7 +89,7 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{ String principal=authentication.getUsername(); _logger.debug("principal "+principal); serviceResponseBuilder.success().setUser(principal); - if(pgtUrl != null && !pgtUrl.equalsIgnoreCase("")) { + if(StringUtils.isNotBlank(pgtUrl)) { ProxyGrantingTicketIOUImpl proxyGrantingTicketIOUImpl =new ProxyGrantingTicketIOUImpl(); String proxyGrantingTicketIOU=casProxyGrantingTicketServices.createTicket(proxyGrantingTicketIOUImpl); diff --git a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasRestV1Endpoint.java b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasRestV1Endpoint.java index b8325453..7d7c61bb 100644 --- a/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasRestV1Endpoint.java +++ b/maxkey-protocols/maxkey-protocol-cas/src/main/java/org/maxkey/authz/cas/endpoint/CasRestV1Endpoint.java @@ -31,6 +31,7 @@ import org.maxkey.authz.cas.endpoint.ticket.ServiceTicketImpl; import org.maxkey.authz.cas.endpoint.ticket.TicketGrantingTicketImpl; import org.maxkey.entity.UserInfo; import org.maxkey.entity.apps.AppsCasDetails; +import org.maxkey.util.StringUtils; import org.maxkey.web.HttpResponseConstants; import org.maxkey.web.WebContext; import org.slf4j.Logger; @@ -76,7 +77,7 @@ public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{ @RequestParam(value=CasConstants.PARAMETER.REST_USERNAME,required=true) String username, @RequestParam(value=CasConstants.PARAMETER.REST_PASSWORD,required=true) String password){ try { - if (password == null || password.isEmpty()) { + if (StringUtils.isBlank(password)) { throw new BadCredentialsException("No credentials are provided or extracted to authenticate the REST request"); } diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message.properties index f7f40b02..3b457316 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message.properties @@ -5,7 +5,7 @@ global.change.language.en=English global.change.language.zh=\u4e2d\u6587 global.language=\u4e2d\u6587 global.text.welcome=\u6b22\u8fce\u60a8 -global.text.manage=\u7ba1\u7406 +global.text.manage=\u540E\u53F0 global.text.copyright=\u7248\u6743\u6240\u6709 global.text.copyright.content=Copyright global.text.copyright.license=Licensed under the Apache License, Version 2.0 @@ -275,7 +275,7 @@ message.action.delete.success=\u5220\u9664\u64cd\u4f5c\u6210\u529f message.action.delete.error=\u5220\u9664\u64cd\u4f5c\u5931\u8d25 #navs -navs.mypps=\u6211\u7684\u5e94\u7528 +navs.mypps=\u5e94\u7528 navs.setting=\u8bbe\u7f6e navs.setting.security=\u5b89\u5168\u8bbe\u7f6e navs.setting.sociallink=\u8ba4\u8bc1\u5173\u8054 diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_en.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_en.properties index 77686fc7..622a3b7e 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_en.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_en.properties @@ -5,7 +5,7 @@ global.change.language.en=English global.change.language.zh=\u4e2d\u6587 global.language=English global.text.welcome=Welcome -global.text.manage=Manage +global.text.manage=Management global.text.copyright=CopyRight global.text.copyright.content=Copyright global.text.copyright.license=Licensed under the Apache License, Version 2.0 @@ -274,7 +274,7 @@ message.action.delete.success=Delete Success message.action.delete.error=Delete Error #navs -navs.mypps=My Apps +navs.mypps=Apps navs.setting=Settings navs.setting.security=Security diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties b/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties index f7f40b02..3b457316 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/messages/message_zh_CN.properties @@ -5,7 +5,7 @@ global.change.language.en=English global.change.language.zh=\u4e2d\u6587 global.language=\u4e2d\u6587 global.text.welcome=\u6b22\u8fce\u60a8 -global.text.manage=\u7ba1\u7406 +global.text.manage=\u540E\u53F0 global.text.copyright=\u7248\u6743\u6240\u6709 global.text.copyright.content=Copyright global.text.copyright.license=Licensed under the Apache License, Version 2.0 @@ -275,7 +275,7 @@ message.action.delete.success=\u5220\u9664\u64cd\u4f5c\u6210\u529f message.action.delete.error=\u5220\u9664\u64cd\u4f5c\u5931\u8d25 #navs -navs.mypps=\u6211\u7684\u5e94\u7528 +navs.mypps=\u5e94\u7528 navs.setting=\u8bbe\u7f6e navs.setting.security=\u5b89\u5168\u8bbe\u7f6e navs.setting.sociallink=\u8ba4\u8bc1\u5173\u8054 diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/nav_primary.ftl b/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/nav_primary.ftl index b05f65a7..029d023f 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/nav_primary.ftl +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/nav_primary.ftl @@ -2,104 +2,70 @@
- +
- diff --git a/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/top.ftl b/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/top.ftl index ace0f5e1..5182b1bb 100644 --- a/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/top.ftl +++ b/maxkey-webs/maxkey-web-maxkey/src/main/resources/templates/views/layout/top.ftl @@ -36,21 +36,20 @@ + + + +
  <@locale code="navs.myprofile"/>  
+
+ -
  <@locale code="login.password.changepassword"/>  
+
  <@locale code="login.password.changepassword"/>  
- <#if Session["current_authentication"].principal.roleAdministrators==true > - - -
  <@locale code="global.text.manage"/>  
-
- - -
  <@locale code="global.text.logout"/>  
+
  <@locale code="global.text.logout"/>  
diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtConfig.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtConfig.java index df114a74..56f1e8b1 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtConfig.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/MaxKeyMgtConfig.java @@ -35,12 +35,15 @@ import org.maxkey.persistence.service.UserInfoService; import org.opensaml.xml.ConfigurationException; import org.quartz.CronScheduleBuilder; import org.quartz.CronTrigger; +import org.quartz.Job; import org.quartz.JobBuilder; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.TriggerBuilder; +import org.apache.mybatis.jpa.persistence.JpaBaseEntity; +import org.apache.mybatis.jpa.persistence.JpaBaseService; import org.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm; import org.maxkey.authn.support.rememberme.AbstractRemeberMeService; import org.slf4j.Logger; @@ -146,29 +149,31 @@ public class MaxKeyMgtConfig implements InitializingBean { public String schedulerJobs( SchedulerFactoryBean schedulerFactoryBean, GroupsService groupsService, - @Value("${maxkey.job.cron.dynamicgroups}") String cronScheduleDynamicGroups + @Value("${maxkey.job.cron.dynamicgroups}") String cronSchedule ) throws SchedulerException { Scheduler scheduler = schedulerFactoryBean.getScheduler(); - dynamicGroupsJob(scheduler,cronScheduleDynamicGroups,groupsService); + //dynamicGroupsJob("DynamicGroups",DynamicGroupsJob.class,scheduler,groupsService,cronSchedule); return "schedulerJobs"; } - private void dynamicGroupsJob(Scheduler scheduler , - String cronSchedule, - GroupsService groupsService) throws SchedulerException { + public void dynamicGroupsJob(String jobName, + Class cls, + Scheduler scheduler, + JpaBaseService service, + String cronSchedule) throws SchedulerException { JobDetail jobDetail = - JobBuilder.newJob(DynamicGroupsJob.class) - .withIdentity("DynamicGroupsJob", "DynamicGroups") + JobBuilder.newJob(cls) + .withIdentity(jobName + "Job", jobName) .build(); JobDataMap jobDataMap = new JobDataMap(); - jobDataMap.put("groupsService", groupsService); + jobDataMap.put("service", service); CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule); CronTrigger cronTrigger = TriggerBuilder.newTrigger() - .withIdentity("triggerDynamicGroups", "DynamicGroups") + .withIdentity("trigger" + jobName, jobName) .usingJobData(jobDataMap) .withSchedule(scheduleBuilder) .build(); diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java new file mode 100644 index 00000000..82f66d26 --- /dev/null +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/AccountsStrategyJob.java @@ -0,0 +1,73 @@ +/* + * 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.jobs; + +import java.io.Serializable; +import org.maxkey.persistence.service.AccountsService; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class AccountsStrategyJob implements Job , Serializable { + + /** + * + */ + private static final long serialVersionUID = 167999890940939820L; + + final static Logger _logger = LoggerFactory.getLogger(AccountsStrategyJob.class); + + private static AccountsService accountsService = null; + + public static class JOBSTATUS{ + public static int STOP = 0; + public static int RUNNING = 1; + public static int FINISHED = 2; + } + + private static int jobStatus = JOBSTATUS.STOP; + + @Override + public void execute(JobExecutionContext context){ + if(jobStatus == JOBSTATUS.RUNNING) { + _logger.info("DynamicGroupsJob is in running . " ); + return; + } + + _logger.debug("DynamicGroupsJob is running ... " ); + jobStatus = JOBSTATUS.RUNNING; + try { + if(accountsService == null) { + accountsService = (AccountsService) context.getMergedJobDataMap().get("accountsService"); + } + + accountsService.refreshAllByStrategy(); + + Thread.sleep(10 *1000); + _logger.debug("DynamicGroupsJob is success " ); + }catch(Exception e) { + _logger.error("Exception " ,e); + jobStatus = JOBSTATUS.STOP; + } + jobStatus = JOBSTATUS.FINISHED; + _logger.debug("DynamicGroupsJob is finished . " ); + } + + +} diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java index 887e95c2..f66962c4 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/jobs/DynamicGroupsJob.java @@ -18,9 +18,6 @@ package org.maxkey.jobs; import java.io.Serializable; -import java.util.List; - -import org.maxkey.entity.Groups; import org.maxkey.persistence.service.GroupsService; import org.quartz.Job; import org.quartz.JobExecutionContext; @@ -56,14 +53,11 @@ public class DynamicGroupsJob implements Job , Serializable { jobStatus = JOBSTATUS.RUNNING; try { if(groupsService == null) { - groupsService = (GroupsService) context.getMergedJobDataMap().get("groupsService"); + groupsService = (GroupsService) context.getMergedJobDataMap().get("service"); } - List groupsList = groupsService.queryDynamicGroups(null); - for(Groups group : groupsList) { - _logger.debug("group " + group); - groupsService.refreshDynamicGroups(group); - } + groupsService.refreshAllDynamicGroups(); + Thread.sleep(10 *1000); _logger.debug("DynamicGroupsJob is success " ); }catch(Exception e) { diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/ApplicationsController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/ApplicationsController.java index 69c188d5..17e0484f 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/ApplicationsController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/apps/contorller/ApplicationsController.java @@ -56,13 +56,13 @@ public class ApplicationsController extends BaseAppContorller { @RequestMapping(value = { "/grid" }) @ResponseBody public JpaPageResults queryDataGrid(@ModelAttribute("applications") Apps applications) { - JpaPageResults jqGridApp=appsService.queryPageResults(applications); - if(jqGridApp!=null&&jqGridApp.getRows()!=null){ - for (Apps app : jqGridApp.getRows()){ + JpaPageResults apps=appsService.queryPageResults(applications); + if(apps!=null&&apps.getRows()!=null){ + for (Apps app : apps.getRows()){ WebContext.setAttribute(app.getId(), app.getIcon()); } } - return jqGridApp; + return apps; } @RequestMapping(value = { "/forwardAdd" }) diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java index a1fcec6a..96957aef 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/AccountsStrategyController.java @@ -21,8 +21,8 @@ import org.apache.mybatis.jpa.persistence.JpaPageResults; import org.maxkey.constants.ConstantsOperateMessage; import org.maxkey.entity.AccountsStrategy; import org.maxkey.entity.Roles; +import org.maxkey.persistence.service.AccountsService; import org.maxkey.persistence.service.AccountsStrategyService; -import org.maxkey.persistence.service.RolesService; import org.maxkey.web.WebContext; import org.maxkey.web.message.Message; import org.maxkey.web.message.MessageType; @@ -46,6 +46,9 @@ public class AccountsStrategyController { @Autowired @Qualifier("accountsStrategyService") AccountsStrategyService accountsStrategyService; + + @Autowired + AccountsService accountsService; @@ -82,6 +85,7 @@ public class AccountsStrategyController { _logger.debug("-Add :" + accountsStrategy); if (accountsStrategyService.insert(accountsStrategy)) { + accountsService.refreshByStrategy(accountsStrategy); //rolesService.refreshDynamicRoles(role); return new Message(WebContext.getI18nValue(ConstantsOperateMessage.INSERT_SUCCESS),MessageType.success); @@ -121,6 +125,7 @@ public class AccountsStrategyController { if (accountsStrategyService.update(accountsStrategy)) { // rolesService.refreshDynamicRoles(role); + accountsService.refreshByStrategy(accountsStrategy); return new Message(WebContext.getI18nValue(ConstantsOperateMessage.UPDATE_SUCCESS),MessageType.success); } else { diff --git a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java index f1631678..5ccfa138 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java +++ b/maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/contorller/GroupPrivilegesController.java @@ -56,16 +56,16 @@ public class GroupPrivilegesController { @ResponseBody public JpaPageResults queryAppsInGroup(@ModelAttribute("groupApp") GroupPrivileges groupApp) { - JpaPageResults jqGridApp; + JpaPageResults groupPrivileges; - jqGridApp= groupPrivilegesService.queryPageResults("appsInGroup",groupApp); + groupPrivileges= groupPrivilegesService.queryPageResults("appsInGroup",groupApp); - if(jqGridApp!=null&&jqGridApp.getRows()!=null){ - for (Apps app : jqGridApp.getRows()){ + if(groupPrivileges!=null&&groupPrivileges.getRows()!=null){ + for (Apps app : groupPrivileges.getRows()){ WebContext.setAttribute(app.getId(), app.getIcon()); } } - return jqGridApp; + return groupPrivileges; } @@ -80,16 +80,16 @@ public class GroupPrivilegesController { @RequestMapping(value = { "/queryAppsNotInGroup" }) @ResponseBody public JpaPageResults queryAppsNotInGroup(@ModelAttribute("groupApp") GroupPrivileges groupApp) { - JpaPageResults jqGridApp; + JpaPageResults groupPrivileges; - jqGridApp= groupPrivilegesService.queryPageResults("appsNotInGroup",groupApp); + groupPrivileges= groupPrivilegesService.queryPageResults("appsNotInGroup",groupApp); - if(jqGridApp!=null&&jqGridApp.getRows()!=null){ - for (Apps app : jqGridApp.getRows()){ + if(groupPrivileges!=null&&groupPrivileges.getRows()!=null){ + for (Apps app : groupPrivileges.getRows()){ WebContext.setAttribute(app.getId(), app.getIcon()); } } - return jqGridApp; + return groupPrivileges; } diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message.properties b/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message.properties index a04001ce..603a8e8a 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message.properties +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message.properties @@ -584,7 +584,7 @@ navs.users=\u7528\u6237\u7ba1\u7406 navs.apps=\u5e94\u7528\u7ba1\u7406 navs.accounts=\u8d26\u53f7\u7ba1\u7406 navs.accounts.strategy=\u8D26\u53F7\u7B56\u7565 -navs.privileges=\u8BBF\u95EE\u63A7\u5236\u7BA1\u7406 +navs.privileges=\u8BBF\u95EE\u63A7\u5236 navs.groups=\u7ec4\u7ba1\u7406 navs.groups.member=\u6210\u5458\u7ba1\u7406 navs.groups.privileges=\u8bbf\u95ee\u6743\u9650\u7ba1\u7406 @@ -599,9 +599,9 @@ navs.audit.synchronizer=\u540C\u6B65\u65E5\u5FD7 navs.audit.connector=\u8FDE\u63A5\u65E5\u5FD7 navs.roles=\u89d2\u8272\u7ba1\u7406 navs.role.member=\u89d2\u8272\u7528\u6237 -navs.role.permissions=\u89d2\u8272\u6743\u9650\u7ba1\u7406 +navs.role.permissions=\u6743\u9650\u7ba1\u7406 navs.resources=\u8d44\u6e90\u7ba1\u7406 navs.adapters=\u9002\u914D\u5668\u6CE8\u518C navs.notices=\u901A\u77E5\u516C\u544A -navs.socials.provider=\u793E\u4EA4\u63D0\u4F9B\u5546 +navs.socials.provider=\u793E\u4EA4\u670D\u52A1 navs.synchronizers=\u540C\u6B65\u5668\u7BA1\u7406 \ No newline at end of file diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_en.properties b/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_en.properties index fe89c681..fec4fe5c 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_en.properties +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_en.properties @@ -597,7 +597,7 @@ navs.accounts.strategy=AccountsStrategy navs.privileges=Access Control navs.groups=Groups navs.groups.member=Groups Member -navs.groups.privileges=Access Privileges +navs.groups.privileges=Access navs.conf=Conf navs.conf.passwordpolicy=PasswordPolicy navs.audit=Audit diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_zh_CN.properties b/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_zh_CN.properties index ec890daf..6f3e6631 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_zh_CN.properties +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/messages/message_zh_CN.properties @@ -589,7 +589,7 @@ navs.users=\u7528\u6237\u7ba1\u7406 navs.apps=\u5e94\u7528\u7ba1\u7406 navs.accounts=\u8d26\u53f7\u7ba1\u7406 navs.accounts.strategy=\u8D26\u53F7\u7B56\u7565 -navs.privileges=\u8BBF\u95EE\u63A7\u5236\u7BA1\u7406 +navs.privileges=\u8BBF\u95EE\u63A7\u5236 navs.groups=\u7ec4\u7ba1\u7406 navs.groups.member=\u6210\u5458\u7ba1\u7406 navs.groups.privileges=\u8bbf\u95ee\u6743\u9650\u7ba1\u7406 @@ -604,9 +604,9 @@ navs.audit.synchronizer=\u540C\u6B65\u65E5\u5FD7 navs.audit.connector=\u8FDE\u63A5\u65E5\u5FD7 navs.roles=\u89d2\u8272\u7ba1\u7406 navs.role.member=\u89d2\u8272\u7528\u6237 -navs.role.permissions=\u89d2\u8272\u6743\u9650\u7ba1\u7406 +navs.role.permissions=\u6743\u9650\u7ba1\u7406 navs.resources=\u8d44\u6e90\u7ba1\u7406 navs.adapters=\u9002\u914D\u5668\u6CE8\u518C navs.notices=\u901A\u77E5\u516C\u544A -navs.socials.provider=\u793E\u4EA4\u63D0\u4F9B\u5546 +navs.socials.provider=\u793E\u4EA4\u670D\u52A1 navs.synchronizers=\u540C\u6B65\u5668\u7BA1\u7406 \ No newline at end of file diff --git a/maxkey-webs/maxkey-web-mgt/src/main/resources/templates/views/layout/sidenav.ftl b/maxkey-webs/maxkey-web-mgt/src/main/resources/templates/views/layout/sidenav.ftl index 5f88015b..fba48a70 100644 --- a/maxkey-webs/maxkey-web-mgt/src/main/resources/templates/views/layout/sidenav.ftl +++ b/maxkey-webs/maxkey-web-mgt/src/main/resources/templates/views/layout/sidenav.ftl @@ -27,14 +27,25 @@ - +
  • + + <@locale code="navs.apps"/> + + +
  • <@locale code="navs.privileges"/>