MaxKeyMgtConfig.java 7.2 KB
Newer Older
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/*
 * 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.
 */
 

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
18 19
package org.maxkey;

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
20 21
import javax.sql.DataSource;
import org.maxkey.authz.oauth2.provider.client.JdbcClientDetailsService;
22 23 24 25
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.RedisTokenStore;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
26
import org.maxkey.jobs.DynamicGroupsJob;
M
MaxKey 已提交
27
import org.maxkey.password.onetimepwd.AbstractOtpAuthn;
M
MaxKey 已提交
28
import org.maxkey.password.onetimepwd.impl.TimeBasedOtpAuthn;
M
MaxKey 已提交
29 30 31
import org.maxkey.persistence.db.LoginHistoryService;
import org.maxkey.persistence.db.LoginService;
import org.maxkey.persistence.db.PasswordPolicyValidator;
32
import org.maxkey.persistence.redis.RedisConnectionFactory;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
33
import org.maxkey.persistence.service.GroupsService;
M
MaxKey 已提交
34
import org.maxkey.persistence.service.UserInfoService;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
35 36 37
import org.opensaml.xml.ConfigurationException;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
38
import org.quartz.Job;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
39 40 41 42 43 44
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
45 46
import org.apache.mybatis.jpa.persistence.JpaBaseEntity;
import org.apache.mybatis.jpa.persistence.JpaBaseService;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
47
import org.maxkey.authn.realm.jdbc.JdbcAuthenticationRealm;
M
MaxKey 已提交
48
import org.maxkey.authn.support.rememberme.AbstractRemeberMeService;
MaxKey单点登录官方's avatar
kaptcha  
MaxKey单点登录官方 已提交
49 50
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
51
import org.springframework.beans.factory.InitializingBean;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
52
import org.springframework.beans.factory.annotation.Value;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
53
import org.springframework.context.annotation.Bean;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
54
import org.springframework.context.annotation.Configuration;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
55
import org.springframework.jdbc.core.JdbcTemplate;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
56
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
57
import org.springframework.security.crypto.password.PasswordEncoder;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
58 59

@Configuration
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
60
public class MaxKeyMgtConfig  implements InitializingBean {
MaxKey单点登录官方's avatar
kaptcha  
MaxKey单点登录官方 已提交
61
    private static final  Logger _logger = LoggerFactory.getLogger(MaxKeyMgtConfig.class);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
62
    
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
63 64

    @Bean(name = "oauth20JdbcClientDetailsService")
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
65 66 67 68
    public JdbcClientDetailsService JdbcClientDetailsService(
                DataSource dataSource,PasswordEncoder passwordReciprocal) {
	    JdbcClientDetailsService clientDetailsService = new JdbcClientDetailsService(dataSource);
	    clientDetailsService.setPasswordEncoder(passwordReciprocal);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
69
	    _logger.debug("JdbcClientDetailsService inited.");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
70 71
        return clientDetailsService;
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
72
	
73 74 75 76 77 78 79
    /**
     * TokenStore. 
     * @param persistence int
     * @return oauth20TokenStore
     */
    @Bean(name = "oauth20TokenStore")
    public TokenStore oauth20TokenStore(
M
MaxKey 已提交
80
            @Value("${maxkey.server.persistence}") int persistence,
81 82 83
            JdbcTemplate jdbcTemplate,
            RedisConnectionFactory jedisConnectionFactory) {
        TokenStore tokenStore = null;
84
        if (persistence == 2) {
85 86
            tokenStore = new RedisTokenStore(jedisConnectionFactory);
            _logger.debug("RedisTokenStore");
87 88 89
        }else {
            tokenStore = new InMemoryTokenStore();
            _logger.debug("InMemoryTokenStore"); 
90
        }
91
        
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
        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;
    }
    
	
M
MaxKey 已提交
111
	//浠ヤ笅鍐呭鍙互娉ㄩ噴鎺夊悗鍐峹ml涓厤缃�,xml寮曞叆鍦∕axKeyMgtApplication涓�
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
112
	@Bean(name = "authenticationRealm")
M
MaxKey 已提交
113 114 115 116 117 118
	public JdbcAuthenticationRealm authenticationRealm(
 			PasswordEncoder passwordEncoder,
	    		PasswordPolicyValidator passwordPolicyValidator,
	    		LoginService loginService,
	    		LoginHistoryService loginHistoryService,
	    		AbstractRemeberMeService remeberMeService,
M
MaxKey 已提交
119
	    		UserInfoService userInfoService,
M
MaxKey 已提交
120 121 122 123 124 125 126 127
             JdbcTemplate jdbcTemplate) {
		
        JdbcAuthenticationRealm authenticationRealm = new JdbcAuthenticationRealm(
        		passwordEncoder,
        		passwordPolicyValidator,
        		loginService,
        		loginHistoryService,
        		remeberMeService,
M
MaxKey 已提交
128
        		userInfoService,
M
MaxKey 已提交
129 130
        		jdbcTemplate);
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
131 132 133
        _logger.debug("JdbcAuthenticationRealm inited.");
        return authenticationRealm;
    }
M
MaxKey 已提交
134

M
MaxKey 已提交
135 136 137
	@Bean(name = "timeBasedOtpAuthn")
    public AbstractOtpAuthn timeBasedOtpAuthn() {
		AbstractOtpAuthn tfaOtpAuthn = new TimeBasedOtpAuthn();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
138
	    _logger.debug("TimeBasedOtpAuthn inited.");
M
MaxKey 已提交
139
        return tfaOtpAuthn;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
140 141
    }
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
142 143 144 145 146 147 148
    /**
     * schedulerJobsInit.
     * @return schedulerJobsInit
     * @throws ConfigurationException 
     * @throws SchedulerException 
     */
    @Bean(name = "schedulerJobs")
M
MaxKey 已提交
149
    public String  schedulerJobs(
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
150 151
            SchedulerFactoryBean schedulerFactoryBean,
            GroupsService groupsService,
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
152
            @Value("${maxkey.job.cron.dynamicgroups}") String cronSchedule
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
153 154 155
            ) throws SchedulerException {
       
        Scheduler scheduler = schedulerFactoryBean.getScheduler();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
156
        //dynamicGroupsJob("DynamicGroups",DynamicGroupsJob.class,scheduler,groupsService,cronSchedule);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
157
        
M
MaxKey 已提交
158
        return "schedulerJobs";
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
159 160 161
    }
    
	
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
162 163 164 165 166
    public void dynamicGroupsJob(String jobName,
                                  Class<Job> cls,
                                  Scheduler scheduler,
                                  JpaBaseService<JpaBaseEntity> service,
                                  String cronSchedule) throws SchedulerException {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
167
        JobDetail jobDetail = 
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
168 169
                JobBuilder.newJob(cls) 
                .withIdentity(jobName + "Job", jobName)
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
170 171
                .build();
        JobDataMap jobDataMap = new JobDataMap();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
172
        jobDataMap.put("service", service);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
173 174 175
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronSchedule);
        CronTrigger cronTrigger = 
                TriggerBuilder.newTrigger()
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
176
                .withIdentity("trigger" + jobName, jobName)
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
177 178 179 180 181 182
                .usingJobData(jobDataMap)
                .withSchedule(scheduleBuilder)
                .build();
        scheduler.scheduleJob(jobDetail,cronTrigger);    
    }
	 
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
183 184 185 186
    @Override
    public void afterPropertiesSet() throws Exception {
        
    }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
187

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
188
}