InitializeContext.java 10.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
init  
MaxKey单点登录官方 已提交
18 19 20 21 22 23 24 25 26 27 28
package org.maxkey.web;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
29

30 31
import org.apache.commons.lang.SystemUtils;
import org.apache.commons.lang3.ArchUtils;
32
import org.joda.time.DateTime;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
33
import org.maxkey.cache.CacheFactory;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
34
import org.maxkey.configuration.ApplicationConfig;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
35 36 37 38
import org.maxkey.util.PathUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
39 40
import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
41
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
42 43
import org.springframework.core.env.PropertySource;
import org.springframework.core.env.StandardEnvironment;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
44
import org.springframework.security.core.context.SecurityContextHolder;
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
45 46 47
import org.springframework.web.context.support.WebApplicationContextUtils;

/**
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
48
 * InitApplicationContext .
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
49 50 51
 * @author Crystal.Sea
 *
 */
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
52 53
public class InitializeContext extends HttpServlet {
    private static final Logger _logger = LoggerFactory.getLogger(InitializeContext.class);
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
54 55
    private static final long serialVersionUID = -797399138268601444L;
    ApplicationContext applicationContext;
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
56
    
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
57 58 59 60 61 62 63 64 65

    @Override
    public String getServletInfo() {
        return super.getServletInfo();
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
66 67 68 69
        
        _logger.info("SecurityContextHolder StrategyName " + SessionSecurityContextHolderStrategy.class.getCanonicalName());
        SecurityContextHolder.setStrategyName(SessionSecurityContextHolderStrategy.class.getCanonicalName());
        
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
70 71 72 73
        WebContext.applicationContext = applicationContext;
        
        org.apache.mybatis.jpa.util.WebContext.applicationContext = applicationContext;
        
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
        // List Environment Variables
        listEnvVars();

        listProperties();

        // List DatabaseMetaData Variables
        listDataBaseVariables();

        // load caches
        loadCaches();

        // Show License
        showLicense();
    }

    /**
    * InitApplicationContext.
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
91
    */
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
92
    public InitializeContext() {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
93 94
        this.applicationContext = 
                WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
95 96
    }

MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
97
    public InitializeContext(ConfigurableApplicationContext applicationContext) {
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
98 99 100
        this.applicationContext = applicationContext;
    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
101 102 103
    /**
     * loadCaches.
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
104
    public void loadCaches() {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
105
        _logger.info("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
106 107 108 109
        _logger.info("Load Caches ");

        try {
            if (applicationContext.containsBean("cacheFactory")) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
110 111
                CacheFactory cacheFactory = 
                        applicationContext.getBean("cacheFactory", CacheFactory.class);
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
112 113 114 115 116
                cacheFactory.start();
            }
        } catch (BeansException e) {
            e.printStackTrace();
        }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
117
        _logger.info("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
118 119 120

    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
121 122 123
    /**
     * listDataBaseVariables.
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
124 125 126
    public void listDataBaseVariables() {
        if (applicationContext.containsBean("dataSource")) {
            try {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
127
                _logger.debug("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
128
                _logger.debug("List DatabaseMetaData Variables ");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
129 130
                Connection connection = 
                        ((javax.sql.DataSource) applicationContext.getBean("dataSource"))
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
131 132 133
                        .getConnection();

                java.sql.DatabaseMetaData databaseMetaData = connection.getMetaData();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
                ApplicationConfig.databaseProduct = databaseMetaData.getDatabaseProductName();
                
                _logger.debug("DatabaseProductName   :   {}", 
                         databaseMetaData.getDatabaseProductName());
                _logger.debug("DatabaseProductVersion:   {}" ,
                         databaseMetaData.getDatabaseProductVersion());
                _logger.trace("DatabaseMajorVersion  :   {}" ,
                         databaseMetaData.getDatabaseMajorVersion());
                _logger.trace("DatabaseMinorVersion  :   {}" ,
                         databaseMetaData.getDatabaseMinorVersion());
                _logger.trace("supportsTransactions  :   {}" ,
                         databaseMetaData.supportsTransactions());
                _logger.trace("DefaultTransaction    :   {}" ,
                         databaseMetaData.getDefaultTransactionIsolation());
                _logger.trace("MaxConnections        :   {}" ,
                         databaseMetaData.getMaxConnections());
M
MaxKey 已提交
150
                _logger.trace("");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
151 152 153 154 155 156 157 158
                _logger.trace("JDBCMajorVersion      :   {}" ,
                         databaseMetaData.getJDBCMajorVersion());
                _logger.trace("JDBCMinorVersion      :   {}" ,
                         databaseMetaData.getJDBCMinorVersion());
                _logger.trace("DriverName            :   {}" ,
                         databaseMetaData.getDriverName());
                _logger.trace("DriverVersion         :   {}" ,
                         databaseMetaData.getDriverVersion());
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
159
                _logger.debug("");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
160 161 162 163
                _logger.debug("DBMS  URL             :   {}" ,
                         databaseMetaData.getURL());
                _logger.debug("UserName              :   {}" ,
                         databaseMetaData.getUserName());
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
164
                _logger.debug("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
165 166
            } catch (SQLException e) {
                e.printStackTrace();
M
MaxKey 已提交
167
                _logger.error("DatabaseMetaData Variables Error .",e);
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
168 169 170 171
            }
        }
    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
172 173 174
    /**
     * propertySourcesPlaceholderConfigurer.
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
175 176
    public void listProperties() {
        if (applicationContext.containsBean("propertySourcesPlaceholderConfigurer")) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
177 178 179 180
            _logger.trace("-----------------------------------------------------------");
            _logger.trace("List Properties Variables ");
            PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer = 
                    ((PropertySourcesPlaceholderConfigurer) applicationContext
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
181
                    .getBean("propertySourcesPlaceholderConfigurer"));
182 183
            
            WebContext.properties =  (StandardEnvironment) propertySourcesPlaceholderConfigurer
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
184
                    .getAppliedPropertySources()
185
                    .get(PropertySourcesPlaceholderConfigurer.ENVIRONMENT_PROPERTIES_PROPERTY_SOURCE_NAME)
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
186
                    .getSource();
187 188 189
  
            Iterator<PropertySource<?>> it =WebContext.properties.getPropertySources().iterator();
            while(it.hasNext()) {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
190
            	 _logger.debug("propertySource {}" , it.next());
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
191
            }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
192
            _logger.trace("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
193 194 195
        }
    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
196 197 198
    /**
     * listEnvVars.
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
199
    public void listEnvVars() {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
200
        _logger.debug("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
201 202 203 204 205 206 207 208 209 210
        _logger.debug("List Environment Variables ");
        Map<String, String> map = System.getenv();
        SortedSet<String> keyValueSet = new TreeSet<String>();
        for (Iterator<String> itr = map.keySet().iterator(); itr.hasNext();) {
            String key = itr.next();
            keyValueSet.add(key);
        }
        // out
        for (Iterator<String> it = keyValueSet.iterator(); it.hasNext();) {
            String key = (String) it.next();
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
211
            _logger.trace(key + "   =   {}" , map.get(key));
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
212
        }
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
213 214 215 216 217 218 219
        _logger.debug("APP_HOME" + "   =   {}" , PathUtils.getInstance().getAppPath());
        _logger.debug("OS      : {}({} {}), version {}",
                    SystemUtils.OS_NAME,
                    SystemUtils.OS_ARCH,
                    ArchUtils.getProcessor().getType(),
                    SystemUtils.OS_VERSION
                    
220
                );
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
221 222 223
        _logger.debug("COMPUTER: {}, USERNAME : {}",
                        map.get("COMPUTERNAME") ,
                        map.get("USERNAME")
224 225
                );
        _logger.debug("JAVA    :");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
226 227 228 229 230 231 232 233 234 235
        _logger.debug("{} java version {}, class {}",
                        SystemUtils.JAVA_VENDOR,
                        SystemUtils.JAVA_VERSION,
                        SystemUtils.JAVA_CLASS_VERSION
                    );
        _logger.debug("{} (build {}, {})",
                        SystemUtils.JAVA_VM_NAME,
                        SystemUtils.JAVA_VM_VERSION,
                        SystemUtils.JAVA_VM_INFO
                    );
236
    
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
237
        _logger.debug("-----------------------------------------------------------");
238
        
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
239 240
    }

MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
241 242 243
    /**
     * showLicense.
     */
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
244
    public void showLicense() {
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
245
        _logger.info("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
246
        _logger.info("+                                MaxKey ");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
247
        _logger.info("+                      Single   Sign   On ( SSO ) ");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
248 249
        _logger.info("+                           Version {}", 
                        WebContext.properties.getProperty("application.formatted-version"));
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
250
        _logger.info("+");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
251 252 253
        _logger.info("+                  {}Copyright 2018-{} https://www.maxkey.top/",
        			    (char)0xA9 , new DateTime().getYear()
        			);
254
        _logger.info("+                 Licensed under the Apache License, Version 2.0 ");
MaxKey单点登录官方's avatar
MaxKey单点登录官方 已提交
255
        _logger.info("-----------------------------------------------------------");
MaxKey单点登录官方's avatar
v1.3 RC  
MaxKey单点登录官方 已提交
256
    }
MaxKey单点登录官方's avatar
init  
MaxKey单点登录官方 已提交
257 258

}