pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/envm/Deleted.java
@@ -1,10 +1,13 @@ package com.dy.common.mybatis.envm; import com.baomidou.mybatisplus.annotation.EnumValue; public enum Deleted implements IEnum{ YES((byte)1, "是"), NO((byte)0, "否"); @EnumValue public Byte code ; public String name ; pipIrr-platform/pipIrr-common/src/main/java/com/dy/common/mybatis/envm/Disabled.java
@@ -1,10 +1,13 @@ package com.dy.common.mybatis.envm; import com.baomidou.mybatisplus.annotation.EnumValue; public enum Disabled implements IEnum{ YES((byte)1, "是"), NO((byte)0, "否"); @EnumValue public Byte code ; public String name ; pipIrr-platform/pipIrr-global/src/main/resources/application-global.yml
@@ -70,5 +70,22 @@ default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler pipIrr: demo: webPort: 8000 actutorPort: 9000 sso: checkUrl: http://127.0.0.1:8888/sso/sso/ssoCheck webPort: 8080 actutorPort: 9080 base: webPort: 8080 actutorPort: 9080 remote: webPort: 8080 actutorPort: 9080 statistics: webPort: 8080 actutorPort: 9080 gis: webPort: 8080 actutorPort: 9080 pipIrr-platform/pipIrr-web/pipIrr-web-base/src/main/resources/application.yml
@@ -5,10 +5,10 @@ #actutor的web端口 management: server: port: 9080 port: ${pipIrr.base.actutorPort} #web服务端口,tomcat默认是8080 server: port: 8080 port: ${pipIrr.base.webPort} servlet: context-path: /base #web访问上下文路径 context-parameters: pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/java/com/dy/pipIrrDemo/demo/DemoCtrl.java
@@ -66,7 +66,7 @@ ) }) @GetMapping("info/{id}/") //http://127.0.0.1:8080/base/demo/info/123234234/?name=张三 //http://127.0.0.1:8000/demo/demo/info/123234234/?name=张三 @SsoAop(power="123456", ifAllPower = {"123", "456"}) public BaseResponse<String> info(@PathVariable String id, @RequestParam String name) throws GlException{ if(name == null || name.trim().equals("")){ @@ -96,7 +96,7 @@ )) @PostMapping(value = "test", consumes = "application/json") //@RequestMapping(value="test", method = RequestMethod.POST, consumes = "application/json") //http://127.0.0.1:8080/base/demo/test/{"id":123456789,"age":12,"name":"test","tel":"1230987654"} //http://127.0.0.1:8000/demo/demo/test/{"id":123456789,"age":12,"name":"test","tel":"1230987654"} public BaseResponse<DemoTest> test(@RequestBody DemoTestVo req){ DemoTest po = new DemoTest() ; po.id = System.currentTimeMillis() ; pipIrr-platform/pipIrr-web/pipIrr-web-demo/src/main/resources/application.yml
@@ -5,10 +5,10 @@ #actutor的web端口 management: server: port: 9000 port: ${pipIrr.demo.actutorPort} #web服务端口,tomcat默认是8080 server: port: 8000 port: ${pipIrr.demo.webPort} servlet: context-path: /demo #web访问上下文路径 context-parameters: pipIrr-platform/pipIrr-web/pipIrr-web-gis/src/main/resources/application.properties
File was deleted pipIrr-platform/pipIrr-web/pipIrr-web-gis/src/main/resources/application.yml
New file @@ -0,0 +1,18 @@ spring: profiles: include: global, database #actutor的web端口 management: server: port: ${pipIrr.gis.actutorPort} #web服务端口,tomcat默认是8080 server: port: ${pipIrr.gis.webPort} servlet: context-path: /gis #web访问上下文路径 context-parameters: #GenerateIdSetSuffixListener中应用,取值范围是0-99 idSuffix: 1 #ConfigListener中应用 #configFileNames: config-global.xml,config-demo.xml pipIrr-platform/pipIrr-web/pipIrr-web-gis/src/main/resources/log4j2.yml
New file @@ -0,0 +1,73 @@ Configuration: #status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出;可以设置成Off(关闭)或Error(只输出错误信息) status: Error Properties: # 定义全局变量 Property: #日志文件存储的目录 - name: log.path value: ./logs #日志文件存储名称 - name: project.name value: pipIrrGis #定义输出器,可以输出到控制台和文件. Appenders: #输出到控制台 Console: #Appender命名 name: CONSOLE target: SYSTEM_OUT ThresholdFilter: level: debug #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 PatternLayout: #%n-换行 #%m-日志内容,输出代码中指定的日志信息 #%p-输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL #%r-程序启动到现在的毫秒数 #%%- 输出一个"%" 字符 #%t-当前线程名 #%d-日期和时间, 常用的格式有%d{DATE},%d{ABSOLUTE},%d{HH:mm:ss,SSS},%d{ddMMyyyyHH:mm:ss,SSS} #%l-同%F%L%C%M #%F-java源文件名 #%L-java源码行数 #%C-java类名,%C{1}输出最后一个元素 #%M-java方法名 pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n" # 输出到文件,超过10MB归档 RollingFile: - name: ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/${project.name}.log filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" ThresholdFilter: level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n" Policies: SizeBasedTriggeringPolicy: size: "10 MB" DefaultRolloverStrategy: max: 1000 Loggers: Root: level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off AppenderRef: #Root的子节点,用来指定该日志输出到哪个Appender. - ref: CONSOLE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 # 为包配置特殊的Log级别,方便调试, # 不受Loggers.Root.level限制 Logger: - name: com.dy.pipIrrGlobal.daoBa additivity: false #去除重复的log level: debug #输出日志级别 AppenderRef: - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 pipIrr-platform/pipIrr-web/pipIrr-web-remote/src/main/resources/application.yml
@@ -5,10 +5,10 @@ #actutor的web端口 management: server: port: 9081 port: ${pipIrr.remote.actutorPort} #web服务端口,tomcat默认是8080 server: port: 8081 port: ${pipIrr.remote.webPort} servlet: context-path: /remote #web访问上下文路径 context-parameters: pipIrr-platform/pipIrr-web/pipIrr-web-sso/.gitignore
New file @@ -0,0 +1,33 @@ HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/ ### STS ### .apt_generated .classpath .factorypath .project .settings .springBeans .sts4-cache ### IntelliJ IDEA ### .idea *.iws *.iml *.ipr ### NetBeans ### /nbproject/private/ /nbbuild/ /dist/ /nbdist/ /.nb-gradle/ build/ !**/src/main/**/build/ !**/src/test/**/build/ ### VS Code ### .vscode/ pipIrr-platform/pipIrr-web/pipIrr-web-sso/.mvn/wrapper/maven-wrapper.jarBinary files differ
pipIrr-platform/pipIrr-web/pipIrr-web-sso/.mvn/wrapper/maven-wrapper.properties
New file @@ -0,0 +1,2 @@ distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.5/apache-maven-3.9.5-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar pipIrr-platform/pipIrr-web/pipIrr-web-sso/mvnw
New file @@ -0,0 +1,308 @@ #!/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 # # https://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. # ---------------------------------------------------------------------------- # ---------------------------------------------------------------------------- # Apache Maven Wrapper startup batch script, version 3.2.0 # # Required ENV vars: # ------------------ # JAVA_HOME - location of a JDK home dir # # Optional ENV vars # ----------------- # 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 /usr/local/etc/mavenrc ] ; then . /usr/local/etc/mavenrc fi 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 # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home # See https://developer.apple.com/library/mac/qa/qa1170/_index.html if [ -z "$JAVA_HOME" ]; then if [ -x "/usr/libexec/java_home" ]; then JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME else JAVA_HOME="/Library/Java/Home"; export JAVA_HOME fi fi ;; esac if [ -z "$JAVA_HOME" ] ; then if [ -r /etc/gentoo-release ] ; then JAVA_HOME=$(java-config --jre-home) fi fi # For Cygwin, ensure paths are in UNIX format before anything is touched if $cygwin ; then [ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --unix "$JAVA_HOME") [ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --unix "$CLASSPATH") fi # For Mingw, ensure paths are in UNIX format before anything is touched if $mingw ; then [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" 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="$(\unset -f command 2>/dev/null; \command -v 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 # traverses directory structure from process work directory to filesystem root # first directory with .mvn subdirectory is considered project base directory find_maven_basedir() { if [ -z "$1" ] then echo "Path not specified to find_maven_basedir" return 1 fi basedir="$1" wdir="$1" while [ "$wdir" != '/' ] ; do if [ -d "$wdir"/.mvn ] ; then basedir=$wdir break fi # workaround for JBEAP-8937 (on Solaris 10/Sparc) if [ -d "${wdir}" ]; then wdir=$(cd "$wdir/.." || exit 1; pwd) fi # end of workaround done printf '%s' "$(cd "$basedir" || exit 1; pwd)" } # concatenates all lines of a file concat_lines() { if [ -f "$1" ]; then # Remove \r in case we run on Windows within Git Bash # and check out the repository with auto CRLF management # enabled. Otherwise, we may read lines that are delimited with # \r\n and produce $'-Xarg\r' rather than -Xarg due to word # splitting rules. tr -s '\r\n' ' ' < "$1" fi } log() { if [ "$MVNW_VERBOSE" = true ]; then printf '%s\n' "$1" fi } BASE_DIR=$(find_maven_basedir "$(dirname "$0")") if [ -z "$BASE_DIR" ]; then exit 1; fi MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR log "$MAVEN_PROJECTBASEDIR" ########################################################################################## # Extension to allow automatically downloading the maven-wrapper.jar from Maven-central # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" if [ -r "$wrapperJarPath" ]; then log "Found $wrapperJarPath" else log "Couldn't find $wrapperJarPath, downloading it ..." if [ -n "$MVNW_REPOURL" ]; then wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" else wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" fi while IFS="=" read -r key value; do # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) safeValue=$(echo "$value" | tr -d '\r') case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; esac done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" log "Downloading from: $wrapperUrl" if $cygwin; then wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") fi if command -v wget > /dev/null; then log "Found wget ... using wget" [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi elif command -v curl > /dev/null; then log "Found curl ... using curl" [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" else curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi else log "Falling back to using Java to download" javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" # For Cygwin, switch paths to Windows format before running javac if $cygwin; then javaSource=$(cygpath --path --windows "$javaSource") javaClass=$(cygpath --path --windows "$javaClass") fi if [ -e "$javaSource" ]; then if [ ! -e "$javaClass" ]; then log " - Compiling MavenWrapperDownloader.java ..." ("$JAVA_HOME/bin/javac" "$javaSource") fi if [ -e "$javaClass" ]; then log " - Running MavenWrapperDownloader.java ..." ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" fi fi fi fi ########################################################################################## # End of extension ########################################################################################## # If specified, validate the SHA-256 sum of the Maven wrapper jar file wrapperSha256Sum="" while IFS="=" read -r key value; do case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; esac done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" if [ -n "$wrapperSha256Sum" ]; then wrapperSha256Result=false if command -v sha256sum > /dev/null; then if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then wrapperSha256Result=true fi elif command -v shasum > /dev/null; then if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then wrapperSha256Result=true fi else echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." exit 1 fi if [ $wrapperSha256Result = false ]; then echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 exit 1 fi fi MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" # For Cygwin, switch paths to Windows format before running java if $cygwin; then [ -n "$JAVA_HOME" ] && JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") [ -n "$CLASSPATH" ] && CLASSPATH=$(cygpath --path --windows "$CLASSPATH") [ -n "$MAVEN_PROJECTBASEDIR" ] && MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") fi # 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 # shellcheck disable=SC2086 # safe args exec "$JAVACMD" \ $MAVEN_OPTS \ $MAVEN_DEBUG_OPTS \ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" pipIrr-platform/pipIrr-web/pipIrr-web-sso/mvnw.cmd
New file @@ -0,0 +1,205 @@ @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 https://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 Apache Maven Wrapper startup batch script, version 3.2.0 @REM @REM Required ENV vars: @REM JAVA_HOME - location of a JDK home dir @REM @REM Optional ENV vars @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 keystroke 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 set title of command window title %0 @REM enable echoing by 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 "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\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 @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="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B ) @REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central @REM This allows using the maven wrapper in projects that prohibit checking in binary data. if exist %WRAPPER_JAR% ( if "%MVNW_VERBOSE%" == "true" ( echo Found %WRAPPER_JAR% ) ) else ( if not "%MVNW_REPOURL%" == "" ( SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" ) if "%MVNW_VERBOSE%" == "true" ( echo Couldn't find %WRAPPER_JAR%, downloading it ... echo Downloading from: %WRAPPER_URL% ) powershell -Command "&{"^ "$webclient = new-object System.Net.WebClient;"^ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ "}"^ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ "}" if "%MVNW_VERBOSE%" == "true" ( echo Finished downloading %WRAPPER_JAR% ) ) @REM End of extension @REM If specified, validate the SHA-256 sum of the Maven wrapper jar file SET WRAPPER_SHA_256_SUM="" FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B ) IF NOT %WRAPPER_SHA_256_SUM%=="" ( powershell -Command "&{"^ "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ " exit 1;"^ "}"^ "}" if ERRORLEVEL 1 goto error ) @REM Provide a "standardized" way to retrieve the CLI args that will @REM work with both Windows and non-Windows executions. set MAVEN_CMD_LINE_ARGS=%* %MAVEN_JAVA_EXE% ^ %JVM_CONFIG_MAVEN_PROPS% ^ %MAVEN_OPTS% ^ %MAVEN_DEBUG_OPTS% ^ -classpath %WRAPPER_JAR% ^ "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* 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 "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\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% cmd /C exit /B %ERROR_CODE% pipIrr-platform/pipIrr-web/pipIrr-web-sso/pom.xml
New file @@ -0,0 +1,39 @@ <?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>pipIrr-web</artifactId> <groupId>com.dy</groupId> <version>1.0.0</version> <relativePath>../pom.xml</relativePath> </parent> <packaging>jar</packaging> <artifactId>pipIrr-web-sso</artifactId> <name>pipIrr-web-sso</name> <description>web单点登录系统</description> <dependencies> <!-- 缓存 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> <exclusions> <!-- cache中引用了log4j2,而本系统parent的pom中引入了log4j2,从而重复引入了,所以过滤系cache引入的log4j2 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- 缓存 --> <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</artifactId> <!-- 自动判断使用与spring boot兼容的版本 --> </dependency> </dependencies> </project> pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/PipIrrSsoApplication.java
New file @@ -0,0 +1,31 @@ package com.dy.sso; import com.dy.common.multiDataSource.EnableMultiDataSource; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.EnableAspectJAutoProxy; @SpringBootApplication @EnableAspectJAutoProxy @EnableMultiDataSource @EnableCaching//开启使用缓存 @ComponentScan(basePackages = {"com.dy.common", "com.dy.pipIrrGlobal", "com.dy.sso"}) @MapperScan(basePackages={"com.dy.pipIrrGlobal.daoBa"}) @Slf4j public class PipIrrSsoApplication { public static void main(String[] args) { SpringApplication.run(PipIrrSsoApplication.class, args); log.info("容器启动成功... "); // SpringCacheService springCacheService = SpringContextUtil.getBean(SpringCacheService.class); // springCacheService.query(); // MyGuavaCacheService myGuavaCacheService = SpringContextUtil.getBean(MyGuavaCacheService.class); // myGuavaCacheService.query(); } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/CacheConstants.java
New file @@ -0,0 +1,8 @@ package com.dy.sso.busi; public class CacheConstants { public static final String cacheNames = "ssoCache" ; public static final String loginUserKeyPrefix = "loginUser_" ; } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/LoginVo.java
New file @@ -0,0 +1,32 @@ package com.dy.sso.busi; import io.swagger.v3.oas.annotations.media.Schema; import jakarta.validation.constraints.NotEmpty; import lombok.*; import org.hibernate.validator.constraints.Length; @Data @ToString @NoArgsConstructor @AllArgsConstructor @Builder @Schema(name = "用户登录值对象") /* 模块Controller类方法参数引用了该实体(@RequestBody),模块Schemas API文档才会出现该实体的API, 例如本实体在pipIrr-web-base模块BaseDemoCtrl类方法test(@RequestBody DemoTest req) 中被引用了,该实体才会出现在该模块的API文档(WEB界面)中 */ public class LoginVo { @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "手机号不能为空") //不能为空也不能为null //@NotNull(message = "手机号不能为空") //不能为null但是可以为空 @Length(message = "手机号必须{min}位", min = 11, max = 11) public String phone ; @Schema(description = "密码", requiredMode = Schema.RequiredMode.REQUIRED) @NotEmpty(message = "密码不能为空") //不能为空也不能为null @Length(message = "密码必须{min}位", min = 6, max = 6) public String password ; } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
New file @@ -0,0 +1,207 @@ package com.dy.sso.busi; import com.dy.common.aop.SsoVo; import com.dy.common.webUtil.BaseResponse; import com.dy.common.webUtil.BaseResponseUtils; import com.dy.common.webUtil.ResultCodeMsg; import com.dy.pipIrrGlobal.pojoBa.BaUser; import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletRequest; import jakarta.validation.Valid; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.cache.CacheManager; import org.springframework.http.MediaType; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import java.util.Objects; import java.util.UUID; /** * 注解Tag 在API中显示: Tag 注解, 给整个接口起了个名字与描述" * 注解ApiResponses 和 注解ApiResponse 用来配置响应; * 注解Operation 用来设置接口名称和描述; * 注解Parameter 用来设置请求参数的描述、是否必填和示例。 */ @Slf4j @Tag(name = "用户登录", description = "单点登录系统(sso)") @RestController @RequestMapping(path="sso") @SuppressWarnings("unchecked")//java版本越高,对泛型约束越严,所以配置SuppressWarnings("unchecked") public class SsoCtrl { //在属性上注解@Autowired时,会警告 Field injection is not recommended(不再推荐使用字段注入) private SsoSv sv ; //@Autowired //private CacheManager cacheManager ; @Autowired public void setSv(SsoSv sv ){ this.sv = sv ; } /** * 客户端请求用户登录,客户端提交Json数据 * @param vo 用户登录值对象 * @return 登录用户值对象 */ @Operation(summary = "单点登录", description = "提交登录用户值对象(json格式),进行单点登录") /* //下面这个不起作用,通过@RequestBody=直接显示LoginVo的API @io.swagger.v3.oas.annotations.parameters.RequestBody( //required = true, description = "form值对象", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = LoginVo.class))} ) */ @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回登录用户值对象(数据基类的content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = UserVo.class))} ) }) @PostMapping(path = "loginJson", consumes = MediaType.APPLICATION_JSON_VALUE) public BaseResponse<UserVo> loginJson(@Valid @RequestBody LoginVo vo, @Parameter(hidden = true) BindingResult bindingResult) { if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String uuid ; BaUser userPo ; try { //Boolean flag = cacheManager.getCacheNames().isEmpty() ; uuid = UUID.randomUUID().toString(); userPo = this.sv.login(uuid, vo.phone, vo.password); } catch (Exception e) { log.error("用户登录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } if(userPo != null){ UserVo uVo = UserVoMapper.INSTANCT.po2vo(userPo); uVo.token = uuid ; return BaseResponseUtils.buildSuccess(uVo); }else{ return BaseResponseUtils.buildFail("登录失败"); } } /** * 客户端请求用户登录,客户端提交form表单 * @param vo 登录用户form表单对象 * @return 登录用户值对象 */ @Operation(summary = "单点登录", description = "提交登录用户数据(form表单),进行单点登录") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回登录用户值对象(数据基类的content)", content = {@Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = UserVo.class))} ) }) @PostMapping(path = "loginForm", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public BaseResponse<UserVo> loginForm(@Parameter(description = "form表单数据", required = true) @Valid LoginVo vo, @Parameter(hidden = true) BindingResult bindingResult){ if(bindingResult != null && bindingResult.hasErrors()){ return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } String uuid ; BaUser userPo ; try { //Boolean flag = cacheManager.getCacheNames().isEmpty() ; uuid = UUID.randomUUID().toString(); userPo = this.sv.login(uuid, vo.phone, vo.password); } catch (Exception e) { log.error("用户登录异常", e); return BaseResponseUtils.buildException(e.getMessage()) ; } if(userPo != null){ UserVo uVo = UserVoMapper.INSTANCT.po2vo(userPo); uVo.token = uuid ; return BaseResponseUtils.buildSuccess(uVo); }else{ return BaseResponseUtils.buildFail("登录失败"); } } /** * 通过UUID退出登录,因为参数是uuid,所以此调用必须是后端相关代码调用,因为前端得不到cookie中的uuid * @param hr HttpServletRequest * @return 正常退出登录返回true,否则返回false */ @Operation(summary = "单点登出", description = "提交token(在header中),进行单点登出") @ApiResponses(value = { @ApiResponse( responseCode = ResultCodeMsg.RsCode.SUCCESS_CODE, description = "返回处理结果(成功true,失败false)(数据基类的content)", content = {@Content(mediaType = MediaType.TEXT_PLAIN_VALUE, schema = @Schema(implementation = Boolean.class))} ) }) @GetMapping(path = "logout") public BaseResponse<Boolean> logout(@Parameter(hidden = true) HttpServletRequest hr){ String token = hr.getHeader("token") ; if(token != null){ this.sv.logout(token) ; return BaseResponseUtils.buildSuccess(true); }else{ return BaseResponseUtils.buildFail("未从header中得到token"); } } /** * 此方法供子模块系统调用,所以不公开在API接口中 * 方法功能:得到登录用户id,否则返回null * @param token 登录用户token * @return 登录用户ID */ @Hidden @GetMapping(path = "loginUserId") public Long loginUserId(String token){ BaUser userPo = this.sv.getByUuid(token) ; return userPo == null ? null : userPo.id ; } /** * 此方法供子模块系统调用,所以不公开在API接口中 * 方法功能:验证是否已经登录,如果登录了,再验证权限 * @param token 登录用户token * @param power 验证一个权限 * @param allPower 验证所有权限 * @param anyPower 验证任何一个权限 * @return SsoVo */ @Hidden @GetMapping(path = "ssoCheck") public SsoVo ssoCheck(String token, String power, String[] allPower, String[] anyPower){ BaUser userPo = this.sv.getByUuid(token) ; SsoVo vo = new SsoVo(); if(userPo != null){ vo.logined = true ; vo.hasPower = true ; vo.dataSourceName = userPo.getOrgTag() ; }else{ vo.logined = false ; vo.hasPower = false ; } return vo ; } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/SsoSv.java
New file @@ -0,0 +1,39 @@ package com.dy.sso.busi; import com.dy.pipIrrGlobal.daoBa.BaUserMapper; import com.dy.pipIrrGlobal.pojoBa.BaUser; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Slf4j @Service public class SsoSv { private BaUserMapper baUserMapper; @Autowired private void setBaUserMapper(BaUserMapper baUserMapper){ this.baUserMapper = baUserMapper ; } //当未注解@Transactional时,会输出日志:SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@46727a0c] was not registered for synchronization because synchronization is not active //@Transactional @Cacheable(cacheNames=CacheConstants.cacheNames, key="'" + CacheConstants.loginUserKeyPrefix + "' + #uuid", sync=true) public BaUser login(String uuid, String phone, String password){ return this.baUserMapper.login(phone, password) ; } @CacheEvict(cacheNames=CacheConstants.cacheNames, key="'" + CacheConstants.loginUserKeyPrefix + "' + #uuid") public void logout(String uuid){ } @Cacheable(cacheNames=CacheConstants.cacheNames, key="'" + CacheConstants.loginUserKeyPrefix + "' + #uuid") public BaUser getByUuid(String uuid){ //此方法目的是直接从缓存中读取,如果缓存无此值,说明数据被清楚了,返回null值,需要重新登录 return null ; } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVo.java
New file @@ -0,0 +1,22 @@ package com.dy.sso.busi; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @Data @ToString @NoArgsConstructor @AllArgsConstructor @Builder @Schema(name = "登录用户值对象") public class UserVo { @Schema(description = "姓名") public String name ;//用户姓名 @Schema(description = "手机号") public String phone ;//用户手机号 @Schema(description = "token") public String token ;// } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/busi/UserVoMapper.java
New file @@ -0,0 +1,23 @@ package com.dy.sso.busi; import com.dy.pipIrrGlobal.pojoBa.BaUser; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; @Mapper public interface UserVoMapper { UserVoMapper INSTANCT = Mappers.getMapper(UserVoMapper.class); /** * po转vo * @param po * @return */ @Mapping(target = "name", source = "name") @Mapping(target = "phone", source = "phone") @Mapping(target = "token", ignore=true) UserVo po2vo(BaUser po); } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/config/CaffeineCacheConfiguration.java
New file @@ -0,0 +1,39 @@ package com.dy.sso.config; import com.github.benmanes.caffeine.cache.Caffeine; import org.springframework.cache.CacheManager; import org.springframework.cache.caffeine.CaffeineCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.concurrent.TimeUnit; @Configuration public class CaffeineCacheConfiguration { /* initialCapacity=[integer]: 初始的缓存空间大小 maximumSize=[long]: 缓存的最大条数 maximumWeight=[long]: 缓存的最大权重 expireAfterAccess=[duration]: 最后一次写入或访问后经过固定时间过期 expireAfterWrite=[duration]: 最后一次写入后经过固定时间过期 refreshAfterWrite=[duration]: 创建缓存或者最近一次更新缓存后经过固定的时间间隔,刷新缓存 weakKeys: 打开key的弱引用 weakValues:打开value的弱引用 softValues:打开value的软引用 recordStats:开发统计功能 注意: expireAfterWrite和expireAfterAccess同时存在时,以expireAfterWrite为准。 maximumSize和maximumWeight不可以同时使用 weakValues和softValues不可以同时使用weakValues和softValues不可以同时使用 */ @Bean public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(); cacheManager.setCaffeine(Caffeine.newBuilder() .initialCapacity(10) .maximumSize(10000) .expireAfterAccess(30, TimeUnit.MINUTES)); return cacheManager; } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/config/WebListenerConfiguration.java
New file @@ -0,0 +1,50 @@ package com.dy.sso.config; import com.dy.common.webListener.ConfigListener; import com.dy.sso.util.SsoListener; import jakarta.servlet.ServletContextListener; import org.springframework.boot.web.servlet.ServletListenerRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @SuppressWarnings("unchecked")//不加编辑时警告:“使用了未经检查或不安全的操作。” public class WebListenerConfiguration { /** * 启动顺序 */ private static final int order_config = 1 ; private static final int order_sso = 2 ; @Bean public ConfigListener getGlConfigListener(){ return new ConfigListener() ; } /** * 外部提供Listener * @param listener 外部提供Listener * @return 注册Bean */ @Bean public ServletListenerRegistrationBean<? extends ServletContextListener> regConfigListener(ConfigListener listener) { ServletListenerRegistrationBean<ConfigListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>(); listenerRegistrationBean.setListener(listener); listenerRegistrationBean.setOrder(order_config); return listenerRegistrationBean; } /** * 内部提供listener * @return 注册Bean */ @Bean public ServletListenerRegistrationBean<? extends ServletContextListener> reqSsoListener() { ServletListenerRegistrationBean<SsoListener> listenerRegistrationBean = new ServletListenerRegistrationBean<>(); SsoListener listener = new SsoListener(); listenerRegistrationBean.setListener(listener); listenerRegistrationBean.setOrder(order_sso); return listenerRegistrationBean; } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/java/com/dy/sso/util/SsoListener.java
New file @@ -0,0 +1,22 @@ package com.dy.sso.util; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletContextEvent; import jakarta.servlet.ServletContextListener; import lombok.extern.slf4j.Slf4j; @Slf4j public class SsoListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { ServletContextListener.super.contextInitialized(event); ServletContext con = event.getServletContext(); } @Override public void contextDestroyed(ServletContextEvent event) { ServletContextListener.super.contextDestroyed(event); } } pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/application.yml
New file @@ -0,0 +1,18 @@ spring: profiles: include: global, database #actutor的web端口 management: server: port: ${pipIrr.sso.actutorPort} #web服务端口,tomcat默认是8080 server: port: ${pipIrr.sso.webPort} servlet: context-path: /sso #web访问上下文路径 context-parameters: #GenerateIdSetSuffixListener中应用,取值范围是0-99 IdSuffix: 0 #ConfigListener中应用 configFileNames: config-global.xml,config-sso.xml pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/config/config-sso.xml
New file @@ -0,0 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE config> <config> <sso.test>占位</sso.test> </config> pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/main/resources/log4j2.yml
New file @@ -0,0 +1,79 @@ Configuration: #status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出;可以设置成Off(关闭)或Error(只输出错误信息) status: Error Properties: # 定义全局变量 Property: #日志文件存储的目录 - name: log.path value: ./logs #日志文件存储名称 - name: project.name value: pipIrrSso #定义输出器,可以输出到控制台和文件. Appenders: #输出到控制台 Console: #Appender命名 name: CONSOLE target: SYSTEM_OUT ThresholdFilter: level: debug #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 PatternLayout: #%n-换行 #%m-日志内容,输出代码中指定的日志信息 #%p-输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL #%r-程序启动到现在的毫秒数 #%%- 输出一个"%" 字符 #%t-当前线程名 #%d-日期和时间, 常用的格式有%d{DATE},%d{ABSOLUTE},%d{HH:mm:ss,SSS},%d{ddMMyyyyHH:mm:ss,SSS} #%l-同%F%L%C%M #%F-java源文件名 #%L-java源码行数 #%C-java类名,%C{1}输出最后一个元素 #%M-java方法名 pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n" # 输出到文件,超过10MB归档 RollingFile: - name: ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/${project.name}.log filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" ThresholdFilter: level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n" Policies: SizeBasedTriggeringPolicy: size: "10 MB" DefaultRolloverStrategy: max: 1000 Loggers: Root: level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off AppenderRef: #Root的子节点,用来指定该日志输出到哪个Appender. - ref: CONSOLE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 # 为包配置特殊的Log级别,方便调试, # 不受Loggers.Root.level限制 Logger: - name: com.dy.sso.busi #根据包名称 配置 additivity: false #去除重复的log level: debug #输出日志级别 AppenderRef: - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 - name: com.dy.pipIrrGlobal.daoBa additivity: false #去除重复的log level: debug #输出日志级别 AppenderRef: - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 pipIrr-platform/pipIrr-web/pipIrr-web-sso/src/test/java/com/dy/sso/PipIrrWebSsoApplicationTests.java
New file @@ -0,0 +1,13 @@ package com.dy.sso; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class PipIrrWebSsoApplicationTests { @Test void contextLoads() { } } pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/resources/application.properties
File was deleted pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/resources/application.yml
New file @@ -0,0 +1,18 @@ spring: profiles: include: global, database #actutor的web端口 management: server: port: ${pipIrr.statistics.actutorPort} #web服务端口,tomcat默认是8080 server: port: ${pipIrr.statistics.webPort} servlet: context-path: /sso #web访问上下文路径 context-parameters: #GenerateIdSetSuffixListener中应用,取值范围是0-99 IdSuffix: 0 #ConfigListener中应用 configFileNames: config-global.xml,config-sso.xml pipIrr-platform/pipIrr-web/pipIrr-web-statistics/src/main/resources/log4j2.yml
New file @@ -0,0 +1,79 @@ Configuration: #status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出;可以设置成Off(关闭)或Error(只输出错误信息) status: Error Properties: # 定义全局变量 Property: #日志文件存储的目录 - name: log.path value: ./logs #日志文件存储名称 - name: project.name value: pipIrrStatistics #定义输出器,可以输出到控制台和文件. Appenders: #输出到控制台 Console: #Appender命名 name: CONSOLE target: SYSTEM_OUT ThresholdFilter: level: debug #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 PatternLayout: #%n-换行 #%m-日志内容,输出代码中指定的日志信息 #%p-输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL #%r-程序启动到现在的毫秒数 #%%- 输出一个"%" 字符 #%t-当前线程名 #%d-日期和时间, 常用的格式有%d{DATE},%d{ABSOLUTE},%d{HH:mm:ss,SSS},%d{ddMMyyyyHH:mm:ss,SSS} #%l-同%F%L%C%M #%F-java源文件名 #%L-java源码行数 #%C-java类名,%C{1}输出最后一个元素 #%M-java方法名 pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n" # 输出到文件,超过10MB归档 RollingFile: - name: ROLLING_FILE ignoreExceptions: false fileName: ${log.path}/${project.name}.log filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz" ThresholdFilter: level: error #输出日志级别,输出日志时,首先由Loggers.Root.level或Loggers.Logger.level判断是否输出,然后再由本level判断是否输出 onMatch: ACCEPT #onMatch=ACCEPT 大于等于 "level" 配置的等级地日志输出 onMismatch: DENY #onMismatch=DENY 小于 "level" 配置的等级地日志不输出 #日志内容样式 PatternLayout: pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%C.%M:%L) - %m%n" Policies: SizeBasedTriggeringPolicy: size: "10 MB" DefaultRolloverStrategy: max: 1000 Loggers: Root: level: info #日志输出级别,共有8个级别,按照从低到高为:all < trace < debug < info < warn < error < fatal < off AppenderRef: #Root的子节点,用来指定该日志输出到哪个Appender. - ref: CONSOLE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 # 为包配置特殊的Log级别,方便调试, # 不受Loggers.Root.level限制 Logger: - name: com.dy.sso.busi #根据包名称 配置 additivity: false #去除重复的log level: debug #输出日志级别 AppenderRef: - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 - name: com.dy.pipIrrGlobal.daoBa additivity: false #去除重复的log level: debug #输出日志级别 AppenderRef: - ref: CONSOLE #输出日志时,首先由本.level判断是否输出,然后再由上面的Appenders.Console.ThresholdFilter.level判断是否输出 - ref: ROLLING_FILE #输出日志时,首先由本level判断是否输出,然后再由上面的Appenders.RollingFile.ThresholdFilter.level判断是否输出 pipIrr-platform/pipIrr-web/pipIrr-web.iml
@@ -81,7 +81,7 @@ <orderEntry type="library" name="Maven: io.swagger.core.v3:swagger-models:2.2.9" level="project" /> <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:6.1.2" level="project" /> <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:6.1.2" level="project" /> <orderEntry type="library" name="Maven: mysql:mysql-connector-java:5.1.48" level="project" /> <orderEntry type="library" name="Maven: com.mysql:mysql-connector-j:8.0.33" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.2.20" level="project" /> <orderEntry type="library" name="Maven: com.alibaba:druid:1.2.20" level="project" /> <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:2.0.7" level="project" /> pipIrr-platform/pipIrr-web/pom.xml
@@ -19,6 +19,7 @@ <modules> <module>pipIrr-web-demo</module> <module>pipIrr-web-sso</module> <module>pipIrr-web-base</module> <module>pipIrr-web-remote</module> <module>pipIrr-web-statistics</module> @@ -106,6 +107,7 @@ <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <!--druid-spring-boot连接池--> <dependency>