123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- /*
- * 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;
- import javax.sql.DataSource;
- import org.maxkey.authz.oauth2.provider.client.JdbcClientDetailsService;
- import org.maxkey.authz.oauth2.provider.token.DefaultTokenServices;
- import org.maxkey.authz.oauth2.provider.token.TokenStore;
- import org.maxkey.authz.oauth2.provider.token.store.InMemoryTokenStore;
- import org.maxkey.authz.oauth2.provider.token.store.JdbcTokenStore;
- import org.maxkey.authz.oauth2.provider.token.store.RedisTokenStore;
- import org.maxkey.constants.ConstantsProperties;
- import org.maxkey.crypto.password.opt.impl.TimeBasedOtpAuthn;
- import org.maxkey.jobs.DynamicGroupsJob;
- import org.maxkey.persistence.redis.RedisConnectionFactory;
- import org.maxkey.persistence.service.GroupsService;
- import org.opensaml.xml.ConfigurationException;
- import org.quartz.CronScheduleBuilder;
- import org.quartz.CronTrigger;
- 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.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.InitializingBean;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.context.annotation.PropertySource;
- import org.springframework.jdbc.core.JdbcTemplate;
- import org.springframework.scheduling.quartz.SchedulerFactoryBean;
- import org.springframework.security.crypto.password.PasswordEncoder;
- @Configuration
- @PropertySource(ConstantsProperties.applicationPropertySource)
- public class MaxKeyMgtConfig implements InitializingBean {
- private static final Logger _logger = LoggerFactory.getLogger(MaxKeyMgtConfig.class);
-
- @Bean(name = "oauth20JdbcClientDetailsService")
- public JdbcClientDetailsService JdbcClientDetailsService(
- DataSource dataSource,PasswordEncoder passwordReciprocal) {
- JdbcClientDetailsService clientDetailsService = new JdbcClientDetailsService(dataSource);
- clientDetailsService.setPasswordEncoder(passwordReciprocal);
- _logger.debug("JdbcClientDetailsService inited.");
- return clientDetailsService;
- }
-
- /**
- * TokenStore.
- * @param persistence int
- * @return oauth20TokenStore
- */
- @Bean(name = "oauth20TokenStore")
- public TokenStore oauth20TokenStore(
- @Value("${config.server.persistence}") int persistence,
- JdbcTemplate jdbcTemplate,
- RedisConnectionFactory jedisConnectionFactory) {
- TokenStore tokenStore = null;
- if (persistence == 0) {
- tokenStore = new InMemoryTokenStore();
- _logger.debug("InMemoryTokenStore");
- } else if (persistence == 1) {
- tokenStore = new JdbcTokenStore(jdbcTemplate);
- _logger.debug("JdbcTokenStore");
- } else if (persistence == 2) {
- tokenStore = new RedisTokenStore(jedisConnectionFactory);
- _logger.debug("RedisTokenStore");
- }
- return tokenStore;
- }
-
- /**
- * clientDetailsUserDetailsService.
- * @return oauth20TokenServices
- */
- @Bean(name = "oauth20TokenServices")
- public DefaultTokenServices DefaultTokenServices(
- JdbcClientDetailsService oauth20JdbcClientDetailsService,
- TokenStore oauth20TokenStore) {
- DefaultTokenServices tokenServices = new DefaultTokenServices();
- tokenServices.setClientDetailsService(oauth20JdbcClientDetailsService);
- tokenServices.setTokenStore(oauth20TokenStore);
- tokenServices.setSupportRefreshToken(true);
- return tokenServices;
- }
-
-
- //以下内容可以注释掉后再xml中配置,xml引入在MaxKeyMgtApplication中
- @Bean(name = "authenticationRealm")
- public JdbcAuthenticationRealm JdbcAuthenticationRealm(
- JdbcTemplate jdbcTemplate) {
- JdbcAuthenticationRealm authenticationRealm = new JdbcAuthenticationRealm(jdbcTemplate);
- _logger.debug("JdbcAuthenticationRealm inited.");
- return authenticationRealm;
- }
-
- @Bean(name = "tfaOptAuthn")
- public TimeBasedOtpAuthn tfaOptAuthn() {
- TimeBasedOtpAuthn tfaOptAuthn = new TimeBasedOtpAuthn();
- _logger.debug("TimeBasedOtpAuthn inited.");
- return tfaOptAuthn;
- }
-
- /**
- * schedulerJobsInit.
- * @return schedulerJobsInit
- * @throws ConfigurationException
- * @throws SchedulerException
- */
- @Bean(name = "schedulerJobs")
- public Scheduler schedulerJobs(
- SchedulerFactoryBean schedulerFactoryBean,
- GroupsService groupsService,
- @Value("${config.job.cron.dynamicgroups}") String cronScheduleDynamicGroups
- ) throws SchedulerException {
-
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
- dynamicGroupsJob(scheduler,cronScheduleDynamicGroups,groupsService);
-
- return scheduler;
- }
-
-
- private void dynamicGroupsJob(Scheduler scheduler ,
- String cronSchedule,
- GroupsService groupsService) throws SchedulerException {
- JobDetail jobDetail =
- JobBuilder.newJob(DynamicGroupsJob.class)
- .withIdentity("DynamicGroupsJob", "DynamicGroups")
- .build();
- JobDataMap jobDataMap = new JobDataMap();
- jobDataMap.put("groupsService", groupsService);
- CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule);
- CronTrigger cronTrigger =
- TriggerBuilder.newTrigger()
- .withIdentity("triggerDynamicGroups", "DynamicGroups")
- .usingJobData(jobDataMap)
- .withSchedule(scheduleBuilder)
- .build();
- scheduler.scheduleJob(jobDetail,cronTrigger);
- }
-
- @Override
- public void afterPropertiesSet() throws Exception {
-
- }
- }
|