Pārlūkot izejas kodu

清理hos-saas,此项目为研究项目,不需要包含进工程中

Airhead 8 gadi atpakaļ
vecāks
revīzija
0be7bf41aa
34 mainītis faili ar 0 papildinājumiem un 1376 dzēšanām
  1. 0 24
      hos-saas/.gitignore
  2. BIN
      hos-saas/.mvn/wrapper/maven-wrapper.jar
  3. 0 1
      hos-saas/.mvn/wrapper/maven-wrapper.properties
  4. 0 233
      hos-saas/mvnw
  5. 0 145
      hos-saas/mvnw.cmd
  6. 0 95
      hos-saas/pom.xml
  7. 0 19
      hos-saas/src/main/java/com/yihu/hos/saas/HosSaasApplication.java
  8. 0 31
      hos-saas/src/main/java/com/yihu/hos/saas/configurations/HibernateConfiguration.java
  9. 0 33
      hos-saas/src/main/java/com/yihu/hos/saas/configurations/ServiceConfiguration.java
  10. 0 27
      hos-saas/src/main/java/com/yihu/hos/saas/configurations/WebMvcConfiguration.java
  11. 0 8
      hos-saas/src/main/java/com/yihu/hos/saas/constants/ContextAttributes.java
  12. 0 32
      hos-saas/src/main/java/com/yihu/hos/saas/controllers/AuthenticateController.java
  13. 0 23
      hos-saas/src/main/java/com/yihu/hos/saas/controllers/HelloController.java
  14. 0 20
      hos-saas/src/main/java/com/yihu/hos/saas/daos/TenantDao.java
  15. 0 10
      hos-saas/src/main/java/com/yihu/hos/saas/daos/TestDao.java
  16. 0 20
      hos-saas/src/main/java/com/yihu/hos/saas/daos/UserDao.java
  17. 0 16
      hos-saas/src/main/java/com/yihu/hos/saas/daos/UserTenantDao.java
  18. 0 23
      hos-saas/src/main/java/com/yihu/hos/saas/interceptors/AuthenticateInterceptor.java
  19. 0 34
      hos-saas/src/main/java/com/yihu/hos/saas/interceptors/ChangeSchemaInterceptor.java
  20. 0 107
      hos-saas/src/main/java/com/yihu/hos/saas/models/TenantModel.java
  21. 0 44
      hos-saas/src/main/java/com/yihu/hos/saas/models/TestModel.java
  22. 0 77
      hos-saas/src/main/java/com/yihu/hos/saas/models/UserModel.java
  23. 0 57
      hos-saas/src/main/java/com/yihu/hos/saas/models/UserTenantModel.java
  24. 0 45
      hos-saas/src/main/java/com/yihu/hos/saas/models/bo/UserSession.java
  25. 0 17
      hos-saas/src/main/java/com/yihu/hos/saas/services/AuthenticateService.java
  26. 0 11
      hos-saas/src/main/java/com/yihu/hos/saas/services/HelloService.java
  27. 0 62
      hos-saas/src/main/java/com/yihu/hos/saas/services/impl/AuthenticateServiceImpl.java
  28. 0 13
      hos-saas/src/main/java/com/yihu/hos/saas/services/impl/HelloServiceImpl.java
  29. 0 31
      hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/AuthenticateServiceMockImpl.java
  30. 0 19
      hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/HelloServiceMockImpl.java
  31. 0 60
      hos-saas/src/main/java/com/yihu/hos/saas/utils/LocalContext.java
  32. 0 14
      hos-saas/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  33. 0 9
      hos-saas/src/main/resources/application.yml
  34. 0 16
      hos-saas/src/test/java/com/yihu/hos/HosSaasApplicationTests.java

+ 0 - 24
hos-saas/.gitignore

@ -1,24 +0,0 @@
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/

BIN
hos-saas/.mvn/wrapper/maven-wrapper.jar


+ 0 - 1
hos-saas/.mvn/wrapper/maven-wrapper.properties

@ -1 +0,0 @@
distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.9/apache-maven-3.3.9-bin.zip

+ 0 - 233
hos-saas/mvnw

@ -1,233 +0,0 @@
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven2 Start Up Batch script
#
# Required ENV vars:
# ------------------
#   JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
#   M2_HOME - location of maven2's installed home dir
#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
#     e.g. to debug Maven itself, use
#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
  if [ -f /etc/mavenrc ] ; then
    . /etc/mavenrc
  fi
  if [ -f "$HOME/.mavenrc" ] ; then
    . "$HOME/.mavenrc"
  fi
fi
# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  MINGW*) mingw=true;;
  Darwin*) darwin=true
           #
           # Look for the Apple JDKs first to preserve the existing behaviour, and then look
           # for the new JDKs provided by Oracle.
           #
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then
             #
             # Oracle JDKs
             #
             export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home
           fi
           if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then
             #
             # Apple JDKs
             #
             export JAVA_HOME=`/usr/libexec/java_home`
           fi
           ;;
esac
if [ -z "$JAVA_HOME" ] ; then
  if [ -r /etc/gentoo-release ] ; then
    JAVA_HOME=`java-config --jre-home`
  fi
fi
if [ -z "$M2_HOME" ] ; then
  ## resolve links - $0 may be a link to maven's home
  PRG="$0"
  # need this for relative symlinks
  while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
    else
      PRG="`dirname "$PRG"`/$link"
    fi
  done
  saveddir=`pwd`
  M2_HOME=`dirname "$PRG"`/..
  # make it fully qualified
  M2_HOME=`cd "$M2_HOME" && pwd`
  cd "$saveddir"
  # echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --unix "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Migwn, ensure paths are in UNIX format before anything is touched
if $mingw ; then
  [ -n "$M2_HOME" ] &&
    M2_HOME="`(cd "$M2_HOME"; pwd)`"
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
  # TODO classpath?
fi
if [ -z "$JAVA_HOME" ]; then
  javaExecutable="`which javac`"
  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
    # readlink(1) is not available as standard on Solaris 10.
    readLink=`which readlink`
    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
      if $darwin ; then
        javaHome="`dirname \"$javaExecutable\"`"
        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
      else
        javaExecutable="`readlink -f \"$javaExecutable\"`"
      fi
      javaHome="`dirname \"$javaExecutable\"`"
      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
      JAVA_HOME="$javaHome"
      export JAVA_HOME
    fi
  fi
fi
if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi
if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly." >&2
  echo "  We cannot execute $JAVACMD" >&2
  exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  [ -n "$M2_HOME" ] &&
    M2_HOME=`cygpath --path --windows "$M2_HOME"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
fi
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
  local basedir=$(pwd)
  local wdir=$(pwd)
  while [ "$wdir" != '/' ] ; do
    if [ -d "$wdir"/.mvn ] ; then
      basedir=$wdir
      break
    fi
    wdir=$(cd "$wdir/.."; pwd)
  done
  echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
  if [ -f "$1" ]; then
    echo "$(tr -s '\n' ' ' < "$1")"
  fi
}
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)}
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
  $MAVEN_OPTS \
  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
  ${WRAPPER_LAUNCHER} "$@"

+ 0 - 145
hos-saas/mvnw.cmd

@ -1,145 +0,0 @@
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements.  See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership.  The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License.  You may obtain a copy of the License at
@REM
@REM    http://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied.  See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven2 Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM     e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
set MAVEN_CMD_LINE_ARGS=%*
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar""
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%

+ 0 - 95
hos-saas/pom.xml

@ -1,95 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yihu.hos</groupId>
    <artifactId>hos-saas</artifactId>
    <version>1.3.0</version>
    <packaging>jar</packaging>
    <name>hos-saas</name>
    <description>Demo project for Spring Boot</description>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <repositories>
        <repository>
            <id>repo1.maven.org</id>
            <name>Maven Repository Repo1</name>
            <url>http://repo1.maven.org/maven2/</url>
        </repository>
        <repository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
        <repository>
            <id>org.jboss.repository.releases</id>
            <name>JBoss Maven Release Repository</name>
            <url>https://repository.jboss.org/nexus/content/repositories/releases</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <name>Spring Releases</name>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>

+ 0 - 19
hos-saas/src/main/java/com/yihu/hos/saas/HosSaasApplication.java

@ -1,19 +0,0 @@
package com.yihu.hos.saas;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class HosSaasApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
        SpringApplication.run(HosSaasApplication.class, args);
    }
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(HosSaasApplication.class);
    }
}

+ 0 - 31
hos-saas/src/main/java/com/yihu/hos/saas/configurations/HibernateConfiguration.java

@ -1,31 +0,0 @@
package com.yihu.hos.saas.configurations;
import org.hibernate.Interceptor;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.boot.autoconfigure.orm.jpa.JpaProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.jta.JtaTransactionManager;
import javax.sql.DataSource;
import java.util.Map;
/**
 * @created Airhead 2016/11/14.
 */
@Configuration
public class HibernateConfiguration extends HibernateJpaAutoConfiguration {
    @Autowired
    private Interceptor changeSchemaInterceptor;
    public HibernateConfiguration(DataSource dataSource, JpaProperties jpaProperties, ObjectProvider<JtaTransactionManager> jtaTransactionManagerProvider) {
        super(dataSource, jpaProperties, jtaTransactionManagerProvider);
    }
    @Override
    protected void customizeVendorProperties(Map<String, Object> vendorProperties) {
        vendorProperties.put("hibernate.ejb.interceptor", changeSchemaInterceptor);
        super.customizeVendorProperties(vendorProperties);
    }
}

+ 0 - 33
hos-saas/src/main/java/com/yihu/hos/saas/configurations/ServiceConfiguration.java

@ -1,33 +0,0 @@
package com.yihu.hos.saas.configurations;
import com.yihu.hos.saas.services.AuthenticateService;
import com.yihu.hos.saas.services.HelloService;
import com.yihu.hos.saas.services.impl.AuthenticateServiceImpl;
import com.yihu.hos.saas.services.impl.HelloServiceImpl;
import com.yihu.hos.saas.services.mockimpl.AuthenticateServiceMockImpl;
import com.yihu.hos.saas.services.mockimpl.HelloServiceMockImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @created Airhead 2016/9/23.
 */
@Configuration
public class ServiceConfiguration {
    @Value("${services.HelloService}")
    private boolean helloService;
    @Value("${services.AuthenticateService}")
    private boolean authenticateService;
    @Bean
    public HelloService helloService() {
        return helloService ? new HelloServiceImpl() : new HelloServiceMockImpl();
    }
    @Bean
    AuthenticateService authenticateService() {
        return authenticateService ? new AuthenticateServiceImpl() : new AuthenticateServiceMockImpl();
    }
}

+ 0 - 27
hos-saas/src/main/java/com/yihu/hos/saas/configurations/WebMvcConfiguration.java

@ -1,27 +0,0 @@
package com.yihu.hos.saas.configurations;
import com.yihu.hos.saas.interceptors.AuthenticateInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
 * @created Airhead 2016/11/14.
 */
@EnableWebMvc
@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(authenticateInterceptor())
                .excludePathPatterns("/auth/**");
    }
    @Bean
    AuthenticateInterceptor authenticateInterceptor() {
        return new AuthenticateInterceptor();
    }
}

+ 0 - 8
hos-saas/src/main/java/com/yihu/hos/saas/constants/ContextAttributes.java

@ -1,8 +0,0 @@
package com.yihu.hos.saas.constants;
/**
 * @created Airhead 2016/11/14.
 */
public interface ContextAttributes {
    String SCHEMA = "schema";
}

+ 0 - 32
hos-saas/src/main/java/com/yihu/hos/saas/controllers/AuthenticateController.java

@ -1,32 +0,0 @@
package com.yihu.hos.saas.controllers;
import com.yihu.hos.saas.services.AuthenticateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
@RestController
@RequestMapping(value = "/auth")
public class AuthenticateController {
    @Autowired
    private AuthenticateService authenticateService;
    @RequestMapping(value = "/{tenantName}", method = RequestMethod.POST)
    public String auth(@PathVariable(name = "tenantName") String tenantName,
                       HttpServletRequest request, HttpServletResponse response) {
        HttpSession session = request.getSession();
        String tenantPassword = request.getParameter("tenantPassword");
        String user = request.getParameter("user");
        String password = request.getParameter("password");
        return authenticateService.auth(session, tenantName, tenantPassword, user, password);
    }
}

+ 0 - 23
hos-saas/src/main/java/com/yihu/hos/saas/controllers/HelloController.java

@ -1,23 +0,0 @@
package com.yihu.hos.saas.controllers;
import com.yihu.hos.saas.services.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
/**
 * @created Airhead 2016/9/23.
 */
@RestController
@RequestMapping(value = "/hello")
public class HelloController {
    @Autowired
    private HelloService helloService;
    @RequestMapping(method = RequestMethod.GET)
    public String sayHello() {
        return helloService.sayHello();
    }
}

+ 0 - 20
hos-saas/src/main/java/com/yihu/hos/saas/daos/TenantDao.java

@ -1,20 +0,0 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.TenantModel;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
 * @created Airhead 2016/11/16.
 */
@Component
@Transactional
public interface TenantDao extends CrudRepository<TenantModel, Long> {
    @Query("select a from TenantModel a where a.code = ?1 and a.valid=1")
    TenantModel findOneByCode(String code);
    @Query("select a from TenantModel a where a.name = ?1 and a.valid=1")
    TenantModel findOneByName(String name);
}

+ 0 - 10
hos-saas/src/main/java/com/yihu/hos/saas/daos/TestDao.java

@ -1,10 +0,0 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.TestModel;
import org.springframework.data.repository.CrudRepository;
/**
 * @created Airhead 2016/11/16.
 */
public interface TestDao extends CrudRepository<TestModel, Long> {
}

+ 0 - 20
hos-saas/src/main/java/com/yihu/hos/saas/daos/UserDao.java

@ -1,20 +0,0 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.UserModel;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
 * @created Airhead 2016/9/4.
 */
@Transactional
@Component
public interface UserDao extends CrudRepository<UserModel, Long> {
    @Query("select a from UserModel a where a.name = ?1 and a.valid = 1")
    UserModel findOne(String userName);
    @Query("select a from UserModel a where a.code = ?1 and a.valid = 1")
    UserModel findOneByCode(String userCode);
}

+ 0 - 16
hos-saas/src/main/java/com/yihu/hos/saas/daos/UserTenantDao.java

@ -1,16 +0,0 @@
package com.yihu.hos.saas.daos;
import com.yihu.hos.saas.models.UserModel;
import com.yihu.hos.saas.models.UserTenantModel;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
/**
 * @created Airhead 2016/11/16.
 */
@Component
public interface UserTenantDao extends CrudRepository<UserTenantModel, Long> {
    @Query("select a from UserTenantModel a where a.userCode = ?1")
    UserTenantModel findOne(String userCode);
}

+ 0 - 23
hos-saas/src/main/java/com/yihu/hos/saas/interceptors/AuthenticateInterceptor.java

@ -1,23 +0,0 @@
package com.yihu.hos.saas.interceptors;
import com.yihu.hos.saas.services.AuthenticateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class AuthenticateInterceptor extends HandlerInterceptorAdapter {
    @Autowired
    private AuthenticateService authenticateService;
//    public AuthenticateInterceptor(AuthenticateService authenticateService) {
//        Assert.notNull(authenticateService, "AuthenticateService must be not null");
//        this.authenticateService = authenticateService;
//    }
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return authenticateService.isAuth(request, response);
    }
}

+ 0 - 34
hos-saas/src/main/java/com/yihu/hos/saas/interceptors/ChangeSchemaInterceptor.java

@ -1,34 +0,0 @@
package com.yihu.hos.saas.interceptors;
import com.yihu.hos.saas.constants.ContextAttributes;
import com.yihu.hos.saas.utils.LocalContext;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.EmptyInterceptor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
/**
 * @created Airhead 2016/11/14.
 */
@Component
public class ChangeSchemaInterceptor extends EmptyInterceptor {
    private static final long serialVersionUID = 1L;
    private static Logger logger = LoggerFactory.getLogger(ChangeSchemaInterceptor.class);
    @Override
    public String onPrepareStatement(String sql) {
        String schemaName = getSchema();
        String completeSql = sql;
        if (StringUtils.isNotEmpty(schemaName)) {
            String myCatAnnotation = "/*#mycat:schema=" + schemaName + "*/ ";
            completeSql = myCatAnnotation + sql;
        }
        logger.info("prepare " + completeSql);
        return super.onPrepareStatement(completeSql);
    }
    private String getSchema() {
        return LocalContext.getContext().getAttachment(ContextAttributes.SCHEMA);
    }
}

+ 0 - 107
hos-saas/src/main/java/com/yihu/hos/saas/models/TenantModel.java

@ -1,107 +0,0 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.tenant.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @created Airhead 2016/11/16.
 */
@Entity
@Table(name = "tenant")
public class TenantModel extends IdModel {
    private String code;
    private String name;
    private String password;
    private String schema;
    private Date created;
    private Long createdUnix;
    private Date updated;
    private Long updatedUnix;
    private Integer valid;
    @Column(name = "password")
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "schema")
    public String getSchema() {
        return schema;
    }
    public void setSchema(String schema) {
        this.schema = schema;
    }
    @Column(name = "created")
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    @Column(name = "created_unix")
    public Long getCreatedUnix() {
        return createdUnix;
    }
    public void setCreatedUnix(Long createdUnix) {
        this.createdUnix = createdUnix;
    }
    @Column(name = "updated")
    public Date getUpdated() {
        return updated;
    }
    public void setUpdated(Date updated) {
        this.updated = updated;
    }
    @Column(name = "updated_unix")
    public Long getUpdatedUnix() {
        return updatedUnix;
    }
    public void setUpdatedUnix(Long updatedUnix) {
        this.updatedUnix = updatedUnix;
    }
    @Column(name = "valid")
    public Integer getValid() {
        return valid;
    }
    public void setValid(Integer valid) {
        this.valid = valid;
    }
}

+ 0 - 44
hos-saas/src/main/java/com/yihu/hos/saas/models/TestModel.java

@ -1,44 +0,0 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.tenant.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * @created Airhead 2016/11/16.
 */
@Entity
@Table(name = "test")
public class TestModel extends IdModel {
    private String name;
    private String memo;
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "memo")
    public String getMemo() {
        return memo;
    }
    public void setMemo(String memo) {
        this.memo = memo;
    }
    @Override
    public String toString() {
        return "TestModel{" +
                "name='" + name + '\'' +
                ", memo='" + memo + '\'' +
                '}';
    }
}

+ 0 - 77
hos-saas/src/main/java/com/yihu/hos/saas/models/UserModel.java

@ -1,77 +0,0 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.tenant.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @created Airhead 2016/9/2.
 */
@Entity
@Table(name = "user")
public class UserModel extends IdModel {
    private String code;
    private String name;
    private String password;
    private Date created;
    private Date updated;
    private Integer valid;
    @Column(name = "code")
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "name")
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Column(name = "password")
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Column(name = "created")
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    @Column(name = "updated")
    public Date getUpdated() {
        return updated;
    }
    public void setUpdated(Date updated) {
        this.updated = updated;
    }
    @Column(name = "valid")
    public Integer getValid() {
        return valid;
    }
    public void setValid(Integer valid) {
        this.valid = valid;
    }
}

+ 0 - 57
hos-saas/src/main/java/com/yihu/hos/saas/models/UserTenantModel.java

@ -1,57 +0,0 @@
package com.yihu.hos.saas.models;
import com.yihu.hos.tenant.models.common.IdModel;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * @created Airhead 2016/11/16.
 */
@Entity
@Table(name = "user_tenant")
public class UserTenantModel extends IdModel {
    private String userCode;
    private String tenantSchema;
    private Date created;
    private Date updated;
    @Column(name = "user_code")
    public String getUserCode() {
        return userCode;
    }
    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }
    @Column(name = "tenant_schema")
    public String getTenantSchema() {
        return tenantSchema;
    }
    public void setTenantSchema(String tenantSchema) {
        this.tenantSchema = tenantSchema;
    }
    @Column(name = "created")
    public Date getCreated() {
        return created;
    }
    public void setCreated(Date created) {
        this.created = created;
    }
    @Column(name = "updated")
    public Date getUpdated() {
        return updated;
    }
    public void setUpdated(Date updated) {
        this.updated = updated;
    }
}

+ 0 - 45
hos-saas/src/main/java/com/yihu/hos/saas/models/bo/UserSession.java

@ -1,45 +0,0 @@
package com.yihu.hos.saas.models.bo;
import java.util.UUID;
/**
 * @created Airhead 2016/11/16.
 */
public class UserSession {
    private String userCode;
    private String token;
    private String schema;
    public UserSession() {
    }
    public UserSession(String userCode, String schema) {
        this.userCode = userCode;
        this.schema = schema;
        token = UUID.randomUUID().toString();
    }
    public String getSchema() {
        return schema;
    }
    public void setSchema(String schema) {
        this.schema = schema;
    }
    public String getUserCode() {
        return userCode;
    }
    public void setUserCode(String userCode) {
        this.userCode = userCode;
    }
    public String getToken() {
        return token;
    }
    public void setToken(String token) {
        this.token = token;
    }
}

+ 0 - 17
hos-saas/src/main/java/com/yihu/hos/saas/services/AuthenticateService.java

@ -1,17 +0,0 @@
package com.yihu.hos.saas.services;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
@Service
public interface AuthenticateService {
    boolean isAuth(HttpServletRequest request, HttpServletResponse response) throws Exception;
    String auth(HttpSession httpSession, String tenantName, String tenantPassword, String user, String password);
}

+ 0 - 11
hos-saas/src/main/java/com/yihu/hos/saas/services/HelloService.java

@ -1,11 +0,0 @@
package com.yihu.hos.saas.services;
import org.springframework.stereotype.Service;
/**
 * @created Airhead 2016/9/23.
 */
@Service
public interface HelloService {
    String sayHello();
}

+ 0 - 62
hos-saas/src/main/java/com/yihu/hos/saas/services/impl/AuthenticateServiceImpl.java

@ -1,62 +0,0 @@
package com.yihu.hos.saas.services.impl;
import com.yihu.hos.saas.constants.ContextAttributes;
import com.yihu.hos.saas.daos.TenantDao;
import com.yihu.hos.saas.daos.UserDao;
import com.yihu.hos.saas.models.TenantModel;
import com.yihu.hos.saas.models.UserModel;
import com.yihu.hos.saas.models.bo.UserSession;
import com.yihu.hos.saas.services.AuthenticateService;
import com.yihu.hos.saas.utils.LocalContext;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
public class AuthenticateServiceImpl implements AuthenticateService {
    @Autowired
    private UserDao userDao;
    @Autowired
    private TenantDao tenantDao;
    @Override
    public boolean isAuth(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession session = request.getSession();
        UserSession userSession = (UserSession) session.getAttribute("userSession");
        if (userSession == null) {
            return false;
        }
        LocalContext.getContext().setAttachment(ContextAttributes.SCHEMA, userSession.getSchema());
        return true;
    }
    @Override
    public String auth(HttpSession httpSession, String tenantName, String tenantPassword, String user, String password) {
        TenantModel tenantModel = tenantDao.findOneByName(tenantName);
        //TODO:现在只是简单逻辑,需要修改成安全逻辑
        if (tenantModel == null
//                || !password.equals(tenantModel.getPassword())
                ) {
            return "Tenant Auth Failed";
        }
        //切换Schema
        LocalContext.getContext().setAttachment(ContextAttributes.SCHEMA, tenantModel.getSchema());
        UserModel userModel = userDao.findOne(user);
        //TODO:现在只是简单逻辑,需要修改成安全逻辑
        if (userModel == null || !password.equals(userModel.getPassword())) {
            return "User Auth Failed";
        }
        httpSession.setAttribute("userSession", new UserSession(userModel.getCode(), tenantModel.getSchema()));
        return "Auth Success";
    }
}

+ 0 - 13
hos-saas/src/main/java/com/yihu/hos/saas/services/impl/HelloServiceImpl.java

@ -1,13 +0,0 @@
package com.yihu.hos.saas.services.impl;
import com.yihu.hos.saas.services.HelloService;
/**
 * @created Airhead 2016/9/23.
 */
public class HelloServiceImpl implements HelloService {
    @Override
    public String sayHello() {
        return "Hello World!";
    }
}

+ 0 - 31
hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/AuthenticateServiceMockImpl.java

@ -1,31 +0,0 @@
package com.yihu.hos.saas.services.mockimpl;
import com.yihu.hos.saas.constants.ContextAttributes;
import com.yihu.hos.saas.models.bo.UserSession;
import com.yihu.hos.saas.services.AuthenticateService;
import com.yihu.hos.saas.utils.LocalContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @created Airhead 2016/11/16.
 */
public class AuthenticateServiceMockImpl implements AuthenticateService {
    @Override
    public boolean isAuth(HttpServletRequest request, HttpServletResponse response) throws Exception {
        String name = request.getParameter("name");
        LocalContext.getContext().setAttachment(ContextAttributes.SCHEMA, name);
        return true;
    }
    @Override
    public String auth(HttpSession httpSession, String tenantName, String tenantPassword, String user, String password) {
        UserSession userSession = new UserSession();
        userSession.setUserCode("abc");
        userSession.setToken("1234567890");
        return null;
    }
    
}

+ 0 - 19
hos-saas/src/main/java/com/yihu/hos/saas/services/mockimpl/HelloServiceMockImpl.java

@ -1,19 +0,0 @@
package com.yihu.hos.saas.services.mockimpl;
import com.yihu.hos.saas.daos.TestDao;
import com.yihu.hos.saas.models.TestModel;
import com.yihu.hos.saas.services.HelloService;
import org.springframework.beans.factory.annotation.Autowired;
/**
 * @created Airhead 2016/9/23.
 */
public class HelloServiceMockImpl implements HelloService {
    @Autowired
    private TestDao testDao;
    public String sayHello() {
        TestModel testModel = testDao.findOne(1L);
        return "Hello," + testModel.toString();
    }
}

+ 0 - 60
hos-saas/src/main/java/com/yihu/hos/saas/utils/LocalContext.java

@ -1,60 +0,0 @@
package com.yihu.hos.saas.utils;
import java.util.HashMap;
import java.util.Map;
/**
 * @created Airhead 2016/11/14.
 */
public class LocalContext {
    private static final ThreadLocal<LocalContext> LOCAL = new ThreadLocal<LocalContext>() {
        protected LocalContext initialValue() {
            return new LocalContext();
        }
    };
    private final Map<String, String> attachments = new HashMap<>();
    public static LocalContext getContext() {
        return LOCAL.get();
    }
    public static void removeContext() {
        LOCAL.remove();
    }
    public String getAttachment(String key) {
        return (String) this.attachments.get(key);
    }
    public LocalContext setAttachment(String key, String value) {
        if (value == null) {
            this.attachments.remove(key);
        } else {
            this.attachments.put(key, value);
        }
        return this;
    }
    public LocalContext removeAttachment(String key) {
        this.attachments.remove(key);
        return this;
    }
    public Map<String, String> getAttachments() {
        return this.attachments;
    }
    public LocalContext setAttachments(Map<String, String> attachment) {
        this.attachments.clear();
        if (attachment != null && attachment.size() > 0) {
            this.attachments.putAll(attachment);
        }
        return this;
    }
    public void clearAttachments() {
        this.attachments.clear();
    }
}

+ 0 - 14
hos-saas/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -1,14 +0,0 @@
{
  "properties": [
    {
      "name": "services.HelloService",
      "type": "java.lang.String",
      "description": "Description for services.HelloService."
    },
    {
      "name": "services.AuthenticateService ",
      "type": "java.lang.String",
      "description": "Description for services.AuthenticateService ."
    }
  ]
}

+ 0 - 9
hos-saas/src/main/resources/application.yml

@ -1,9 +0,0 @@
services:
  HelloService: false
  AuthenticateService : true
spring:
  datasource:
    url: jdbc:mysql://192.168.1.220:8066/global_db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
    username: hos
    password: 123456

+ 0 - 16
hos-saas/src/test/java/com/yihu/hos/HosSaasApplicationTests.java

@ -1,16 +0,0 @@
package com.yihu.hos;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class HosSaasApplicationTests {
	@Test
	public void contextLoads() {
	}
}