Parcourir la source

first modif commit

placidenduwayo il y a 2 ans
révision
bea2163ad0
32 fichiers modifiés avec 1427 ajouts et 0 suppressions
  1. 33
    0
      .gitignore
  2. BIN
      .mvn/wrapper/maven-wrapper.jar
  3. 2
    0
      .mvn/wrapper/maven-wrapper.properties
  4. 0
    0
      README.md
  5. 316
    0
      mvnw
  6. 188
    0
      mvnw.cmd
  7. 71
    0
      pom.xml
  8. 75
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/SpringSecurityServerJwtApplication.java
  9. 35
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/models/AppRole.java
  10. 61
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/models/UserAccount.java
  11. 28
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/models/UserAccountRoleForm.java
  12. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/AppRoleNotFoundException.java
  13. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/RoleAlreadyExistsException.java
  14. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/RoleFieldsInvalidException.java
  15. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountAlreadyAssignedThatRoleException.java
  16. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountAlreadyExistsException.java
  17. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountFieldsInvalidException.java
  18. 4
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountNotFoundException.java
  19. 53
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/exceptionHandler/AccountExceptionHandler.java
  20. 9
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/repositories/RoleRepo.java
  21. 8
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/repositories/UserAccountRepo.java
  22. 20
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/service/services/AccountService.java
  23. 105
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/service/services/AccountServiceImpl.java
  24. 33
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/service/utilities/UserAccountAndRolesValidator.java
  25. 42
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/a_userCreation/MyUserDetailsServiceImpl.java
  26. 18
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/b_authenticationFilter/FinalVariables.java
  27. 85
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/b_authenticationFilter/JWTAuthenticationFilter.java
  28. 69
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/c_filterConfig/SpringFilterChain.java
  29. 60
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/tt_authorizationFilter/JWTAuthorizationFilter.java
  30. 56
    0
      src/main/java/fr/natan/microservices/springsecurityserverjwt/web/AccountController.java
  31. 19
    0
      src/main/resources/application.yml
  32. 13
    0
      src/test/java/fr/natan/microservices/springsecurityserverjwt/SpringSecurityServerJwtApplicationTests.java

+ 33
- 0
.gitignore Voir le fichier

@@ -0,0 +1,33 @@
1
+HELP.md
2
+target/
3
+!.mvn/wrapper/maven-wrapper.jar
4
+!**/src/main/**/target/
5
+!**/src/test/**/target/
6
+
7
+### STS ###
8
+.apt_generated
9
+.classpath
10
+.factorypath
11
+.project
12
+.settings
13
+.springBeans
14
+.sts4-cache
15
+
16
+### IntelliJ IDEA ###
17
+.idea
18
+*.iws
19
+*.iml
20
+*.ipr
21
+
22
+### NetBeans ###
23
+/nbproject/private/
24
+/nbbuild/
25
+/dist/
26
+/nbdist/
27
+/.nb-gradle/
28
+build/
29
+!**/src/main/**/build/
30
+!**/src/test/**/build/
31
+
32
+### VS Code ###
33
+.vscode/

BIN
.mvn/wrapper/maven-wrapper.jar Voir le fichier


+ 2
- 0
.mvn/wrapper/maven-wrapper.properties Voir le fichier

@@ -0,0 +1,2 @@
1
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.6/apache-maven-3.8.6-bin.zip
2
+wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar

+ 0
- 0
README.md Voir le fichier


+ 316
- 0
mvnw Voir le fichier

@@ -0,0 +1,316 @@
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
+#    https://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
+# Maven 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 /usr/local/etc/mavenrc ] ; then
40
+    . /usr/local/etc/mavenrc
41
+  fi
42
+
43
+  if [ -f /etc/mavenrc ] ; then
44
+    . /etc/mavenrc
45
+  fi
46
+
47
+  if [ -f "$HOME/.mavenrc" ] ; then
48
+    . "$HOME/.mavenrc"
49
+  fi
50
+
51
+fi
52
+
53
+# OS specific support.  $var _must_ be set to either true or false.
54
+cygwin=false;
55
+darwin=false;
56
+mingw=false
57
+case "`uname`" in
58
+  CYGWIN*) cygwin=true ;;
59
+  MINGW*) mingw=true;;
60
+  Darwin*) darwin=true
61
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
62
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
63
+    if [ -z "$JAVA_HOME" ]; then
64
+      if [ -x "/usr/libexec/java_home" ]; then
65
+        export JAVA_HOME="`/usr/libexec/java_home`"
66
+      else
67
+        export JAVA_HOME="/Library/Java/Home"
68
+      fi
69
+    fi
70
+    ;;
71
+esac
72
+
73
+if [ -z "$JAVA_HOME" ] ; then
74
+  if [ -r /etc/gentoo-release ] ; then
75
+    JAVA_HOME=`java-config --jre-home`
76
+  fi
77
+fi
78
+
79
+if [ -z "$M2_HOME" ] ; then
80
+  ## resolve links - $0 may be a link to maven's home
81
+  PRG="$0"
82
+
83
+  # need this for relative symlinks
84
+  while [ -h "$PRG" ] ; do
85
+    ls=`ls -ld "$PRG"`
86
+    link=`expr "$ls" : '.*-> \(.*\)$'`
87
+    if expr "$link" : '/.*' > /dev/null; then
88
+      PRG="$link"
89
+    else
90
+      PRG="`dirname "$PRG"`/$link"
91
+    fi
92
+  done
93
+
94
+  saveddir=`pwd`
95
+
96
+  M2_HOME=`dirname "$PRG"`/..
97
+
98
+  # make it fully qualified
99
+  M2_HOME=`cd "$M2_HOME" && pwd`
100
+
101
+  cd "$saveddir"
102
+  # echo Using m2 at $M2_HOME
103
+fi
104
+
105
+# For Cygwin, ensure paths are in UNIX format before anything is touched
106
+if $cygwin ; then
107
+  [ -n "$M2_HOME" ] &&
108
+    M2_HOME=`cygpath --unix "$M2_HOME"`
109
+  [ -n "$JAVA_HOME" ] &&
110
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
111
+  [ -n "$CLASSPATH" ] &&
112
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
113
+fi
114
+
115
+# For Mingw, ensure paths are in UNIX format before anything is touched
116
+if $mingw ; then
117
+  [ -n "$M2_HOME" ] &&
118
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
119
+  [ -n "$JAVA_HOME" ] &&
120
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
121
+fi
122
+
123
+if [ -z "$JAVA_HOME" ]; then
124
+  javaExecutable="`which javac`"
125
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
126
+    # readlink(1) is not available as standard on Solaris 10.
127
+    readLink=`which readlink`
128
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
129
+      if $darwin ; then
130
+        javaHome="`dirname \"$javaExecutable\"`"
131
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
132
+      else
133
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
134
+      fi
135
+      javaHome="`dirname \"$javaExecutable\"`"
136
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
137
+      JAVA_HOME="$javaHome"
138
+      export JAVA_HOME
139
+    fi
140
+  fi
141
+fi
142
+
143
+if [ -z "$JAVACMD" ] ; then
144
+  if [ -n "$JAVA_HOME"  ] ; then
145
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
146
+      # IBM's JDK on AIX uses strange locations for the executables
147
+      JAVACMD="$JAVA_HOME/jre/sh/java"
148
+    else
149
+      JAVACMD="$JAVA_HOME/bin/java"
150
+    fi
151
+  else
152
+    JAVACMD="`\\unset -f command; \\command -v java`"
153
+  fi
154
+fi
155
+
156
+if [ ! -x "$JAVACMD" ] ; then
157
+  echo "Error: JAVA_HOME is not defined correctly." >&2
158
+  echo "  We cannot execute $JAVACMD" >&2
159
+  exit 1
160
+fi
161
+
162
+if [ -z "$JAVA_HOME" ] ; then
163
+  echo "Warning: JAVA_HOME environment variable is not set."
164
+fi
165
+
166
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
167
+
168
+# traverses directory structure from process work directory to filesystem root
169
+# first directory with .mvn subdirectory is considered project base directory
170
+find_maven_basedir() {
171
+
172
+  if [ -z "$1" ]
173
+  then
174
+    echo "Path not specified to find_maven_basedir"
175
+    return 1
176
+  fi
177
+
178
+  basedir="$1"
179
+  wdir="$1"
180
+  while [ "$wdir" != '/' ] ; do
181
+    if [ -d "$wdir"/.mvn ] ; then
182
+      basedir=$wdir
183
+      break
184
+    fi
185
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
186
+    if [ -d "${wdir}" ]; then
187
+      wdir=`cd "$wdir/.."; pwd`
188
+    fi
189
+    # end of workaround
190
+  done
191
+  echo "${basedir}"
192
+}
193
+
194
+# concatenates all lines of a file
195
+concat_lines() {
196
+  if [ -f "$1" ]; then
197
+    echo "$(tr -s '\n' ' ' < "$1")"
198
+  fi
199
+}
200
+
201
+BASE_DIR=`find_maven_basedir "$(pwd)"`
202
+if [ -z "$BASE_DIR" ]; then
203
+  exit 1;
204
+fi
205
+
206
+##########################################################################################
207
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
208
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
209
+##########################################################################################
210
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
211
+    if [ "$MVNW_VERBOSE" = true ]; then
212
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
213
+    fi
214
+else
215
+    if [ "$MVNW_VERBOSE" = true ]; then
216
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
217
+    fi
218
+    if [ -n "$MVNW_REPOURL" ]; then
219
+      jarUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
220
+    else
221
+      jarUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
222
+    fi
223
+    while IFS="=" read key value; do
224
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
225
+      esac
226
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
227
+    if [ "$MVNW_VERBOSE" = true ]; then
228
+      echo "Downloading from: $jarUrl"
229
+    fi
230
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
231
+    if $cygwin; then
232
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
233
+    fi
234
+
235
+    if command -v wget > /dev/null; then
236
+        if [ "$MVNW_VERBOSE" = true ]; then
237
+          echo "Found wget ... using wget"
238
+        fi
239
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
240
+            wget "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
241
+        else
242
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
243
+        fi
244
+    elif command -v curl > /dev/null; then
245
+        if [ "$MVNW_VERBOSE" = true ]; then
246
+          echo "Found curl ... using curl"
247
+        fi
248
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
249
+            curl -o "$wrapperJarPath" "$jarUrl" -f
250
+        else
251
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
252
+        fi
253
+
254
+    else
255
+        if [ "$MVNW_VERBOSE" = true ]; then
256
+          echo "Falling back to using Java to download"
257
+        fi
258
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
259
+        # For Cygwin, switch paths to Windows format before running javac
260
+        if $cygwin; then
261
+          javaClass=`cygpath --path --windows "$javaClass"`
262
+        fi
263
+        if [ -e "$javaClass" ]; then
264
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
265
+                if [ "$MVNW_VERBOSE" = true ]; then
266
+                  echo " - Compiling MavenWrapperDownloader.java ..."
267
+                fi
268
+                # Compiling the Java class
269
+                ("$JAVA_HOME/bin/javac" "$javaClass")
270
+            fi
271
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
272
+                # Running the downloader
273
+                if [ "$MVNW_VERBOSE" = true ]; then
274
+                  echo " - Running MavenWrapperDownloader.java ..."
275
+                fi
276
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
277
+            fi
278
+        fi
279
+    fi
280
+fi
281
+##########################################################################################
282
+# End of extension
283
+##########################################################################################
284
+
285
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
286
+if [ "$MVNW_VERBOSE" = true ]; then
287
+  echo $MAVEN_PROJECTBASEDIR
288
+fi
289
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
290
+
291
+# For Cygwin, switch paths to Windows format before running java
292
+if $cygwin; then
293
+  [ -n "$M2_HOME" ] &&
294
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
295
+  [ -n "$JAVA_HOME" ] &&
296
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
297
+  [ -n "$CLASSPATH" ] &&
298
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
299
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
300
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
301
+fi
302
+
303
+# Provide a "standardized" way to retrieve the CLI args that will
304
+# work with both Windows and non-Windows executions.
305
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
306
+export MAVEN_CMD_LINE_ARGS
307
+
308
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
309
+
310
+exec "$JAVACMD" \
311
+  $MAVEN_OPTS \
312
+  $MAVEN_DEBUG_OPTS \
313
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
314
+  "-Dmaven.home=${M2_HOME}" \
315
+  "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
316
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"

+ 188
- 0
mvnw.cmd Voir le fichier

@@ -0,0 +1,188 @@
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    https://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 Maven 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 keystroke 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 by 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 "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
50
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\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/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
124
+
125
+FOR /F "usebackq 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
+    if "%MVNW_VERBOSE%" == "true" (
133
+        echo Found %WRAPPER_JAR%
134
+    )
135
+) else (
136
+    if not "%MVNW_REPOURL%" == "" (
137
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar"
138
+    )
139
+    if "%MVNW_VERBOSE%" == "true" (
140
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
141
+        echo Downloading from: %DOWNLOAD_URL%
142
+    )
143
+
144
+    powershell -Command "&{"^
145
+		"$webclient = new-object System.Net.WebClient;"^
146
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
147
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
148
+		"}"^
149
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
150
+		"}"
151
+    if "%MVNW_VERBOSE%" == "true" (
152
+        echo Finished downloading %WRAPPER_JAR%
153
+    )
154
+)
155
+@REM End of extension
156
+
157
+@REM Provide a "standardized" way to retrieve the CLI args that will
158
+@REM work with both Windows and non-Windows executions.
159
+set MAVEN_CMD_LINE_ARGS=%*
160
+
161
+%MAVEN_JAVA_EXE% ^
162
+  %JVM_CONFIG_MAVEN_PROPS% ^
163
+  %MAVEN_OPTS% ^
164
+  %MAVEN_DEBUG_OPTS% ^
165
+  -classpath %WRAPPER_JAR% ^
166
+  "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
167
+  %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
168
+if ERRORLEVEL 1 goto error
169
+goto end
170
+
171
+:error
172
+set ERROR_CODE=1
173
+
174
+:end
175
+@endlocal & set ERROR_CODE=%ERROR_CODE%
176
+
177
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
178
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
179
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
180
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
181
+:skipRcPost
182
+
183
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
184
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
185
+
186
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
187
+
188
+cmd /C exit /B %ERROR_CODE%

+ 71
- 0
pom.xml Voir le fichier

@@ -0,0 +1,71 @@
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.4</version>
9
+		<relativePath/> <!-- lookup parent from repository -->
10
+	</parent>
11
+	<groupId>fr.natan.microservices</groupId>
12
+	<artifactId>spring-security-server-jwt</artifactId>
13
+	<version>0.0.1-SNAPSHOT</version>
14
+	<name>spring-security-server-jwt</name>
15
+	<description>Spring Security Server with Json Web Token (JWT)</description>
16
+	<properties>
17
+		<java.version>11</java.version>
18
+	</properties>
19
+	<dependencies>
20
+		<dependency>
21
+			<groupId>org.springframework.boot</groupId>
22
+			<artifactId>spring-boot-starter-data-jpa</artifactId>
23
+		</dependency>
24
+		<dependency>
25
+			<groupId>org.springframework.boot</groupId>
26
+			<artifactId>spring-boot-starter-security</artifactId>
27
+		</dependency>
28
+		<dependency>
29
+			<groupId>org.springframework.boot</groupId>
30
+			<artifactId>spring-boot-starter-web</artifactId>
31
+		</dependency>
32
+
33
+		<dependency>
34
+			<groupId>org.springframework.boot</groupId>
35
+			<artifactId>spring-boot-devtools</artifactId>
36
+			<scope>runtime</scope>
37
+			<optional>true</optional>
38
+		</dependency>
39
+		<dependency>
40
+			<groupId>mysql</groupId>
41
+			<artifactId>mysql-connector-java</artifactId>
42
+		</dependency>
43
+
44
+		<dependency>
45
+			<groupId>org.springframework.boot</groupId>
46
+			<artifactId>spring-boot-starter-test</artifactId>
47
+			<scope>test</scope>
48
+		</dependency>
49
+		<dependency>
50
+			<groupId>org.springframework.security</groupId>
51
+			<artifactId>spring-security-test</artifactId>
52
+			<scope>test</scope>
53
+		</dependency>
54
+		<dependency>
55
+			<groupId>com.auth0</groupId>
56
+			<artifactId>java-jwt</artifactId>
57
+			<version>4.0.0</version>
58
+		</dependency>
59
+
60
+	</dependencies>
61
+
62
+	<build>
63
+		<plugins>
64
+			<plugin>
65
+				<groupId>org.springframework.boot</groupId>
66
+				<artifactId>spring-boot-maven-plugin</artifactId>
67
+			</plugin>
68
+		</plugins>
69
+	</build>
70
+
71
+</project>

+ 75
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/SpringSecurityServerJwtApplication.java Voir le fichier

@@ -0,0 +1,75 @@
1
+package fr.natan.microservices.springsecurityserverjwt;
2
+
3
+import org.springframework.boot.SpringApplication;
4
+import org.springframework.boot.autoconfigure.SpringBootApplication;
5
+import org.springframework.context.annotation.Bean;
6
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
7
+import org.springframework.security.crypto.password.PasswordEncoder;
8
+
9
+@SpringBootApplication
10
+public class SpringSecurityServerJwtApplication {
11
+
12
+    public static void main(String[] args) {
13
+        SpringApplication.run(SpringSecurityServerJwtApplication.class, args);
14
+    }
15
+
16
+    @Bean
17
+    PasswordEncoder passwordEncoder() {
18
+        return new BCryptPasswordEncoder();
19
+    }
20
+
21
+   /* @Bean
22
+    public CommandLineRunner start(AccountService accountService) {
23
+        return args -> {
24
+
25
+            AppRole[] appRoles = {
26
+                    new AppRole(null, "user"),
27
+                    new AppRole(null, "cto"),
28
+                    new AppRole(null, "ceo"),
29
+                    new AppRole(null, "hr"),
30
+                    new AppRole(null, "communication"),
31
+                    new AppRole(null, "other-roles")
32
+            };
33
+
34
+
35
+            for (short i = 0; i < appRoles.length; i++) {
36
+                accountService.addNewRole(appRoles[i]);
37
+            }
38
+
39
+            UserAccount[] users = {
40
+                    new UserAccount(null, "placide.nduwayo", "1234", new ArrayList<>()),
41
+                    new UserAccount(null, "smail.sellah", "1234", new ArrayList<>()),
42
+                    new UserAccount(null, "charles.benassaya", "1234", new ArrayList<>()),
43
+                    new UserAccount(null, "david.nivet", "1234", new ArrayList<>()),
44
+                    new UserAccount(null, "david.touitou", "1234", new ArrayList<>()),
45
+                    new UserAccount(null, "sarah.leray", "1234", new ArrayList<>()),
46
+                    new UserAccount(null, "naolie.boudouka", "1234", new ArrayList<>())
47
+            };
48
+
49
+            for (short i = 0; i < users.length; i++) {
50
+                accountService.addNewUserAccount(users[i]);
51
+            }
52
+
53
+            //Charles et david nivet à tous les roles
54
+            for (short i = 0; i < appRoles.length; i++) {
55
+                accountService.addRoleToUser(users[2].getUsername(), appRoles[i].getRoleName());
56
+            }
57
+            for (short i = 0; i < appRoles.length; i++) {
58
+                accountService.addRoleToUser(users[3].getUsername(), appRoles[i].getRoleName());
59
+            }
60
+
61
+            accountService.addRoleToUser(users[0].getUsername(), appRoles[0].getRoleName());
62
+            accountService.addRoleToUser(users[0].getUsername(), appRoles[5].getRoleName());
63
+            accountService.addRoleToUser(users[1].getUsername(), appRoles[0].getRoleName());
64
+            accountService.addRoleToUser(users[1].getUsername(), appRoles[5].getRoleName());
65
+            accountService.addRoleToUser(users[4].getUsername(), appRoles[0].getRoleName());
66
+            accountService.addRoleToUser(users[4].getUsername(), appRoles[5].getRoleName());
67
+            accountService.addRoleToUser(users[5].getUsername(), appRoles[0].getRoleName());
68
+            accountService.addRoleToUser(users[5].getUsername(), appRoles[3].getRoleName());
69
+            accountService.addRoleToUser(users[5].getUsername(), appRoles[5].getRoleName());
70
+            accountService.addRoleToUser(users[6].getUsername(), appRoles[0].getRoleName());
71
+            accountService.addRoleToUser(users[6].getUsername(), appRoles[4].getRoleName());
72
+            accountService.addRoleToUser(users[6].getUsername(), appRoles[5].getRoleName());
73
+        };
74
+    }*/
75
+}

+ 35
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/models/AppRole.java Voir le fichier

@@ -0,0 +1,35 @@
1
+package fr.natan.microservices.springsecurityserverjwt.models;
2
+
3
+import javax.persistence.*;
4
+
5
+@Entity
6
+public class AppRole {
7
+    @Id
8
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
9
+    private Long id;
10
+    private String roleName;
11
+
12
+    public AppRole() {
13
+    }
14
+
15
+    public AppRole(Long id, String roleName) {
16
+        this.id = id;
17
+        this.roleName = roleName;
18
+    }
19
+
20
+    public Long getId() {
21
+        return id;
22
+    }
23
+
24
+    public void setId(Long id) {
25
+        this.id = id;
26
+    }
27
+
28
+    public String getRoleName() {
29
+        return roleName;
30
+    }
31
+
32
+    public void setRoleName(String roleName) {
33
+        this.roleName = roleName;
34
+    }
35
+}

+ 61
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/models/UserAccount.java Voir le fichier

@@ -0,0 +1,61 @@
1
+package fr.natan.microservices.springsecurityserverjwt.models;
2
+
3
+import com.fasterxml.jackson.annotation.JsonProperty;
4
+
5
+import javax.persistence.*;
6
+import java.util.ArrayList;
7
+import java.util.Collection;
8
+
9
+@Entity
10
+public class UserAccount {
11
+    @Id
12
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
13
+    private Long id;
14
+    private String username;
15
+    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
16
+    private String pwd;
17
+    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
18
+    private Collection<AppRole> appRoles = new ArrayList<>();
19
+
20
+    public UserAccount() {
21
+    }
22
+
23
+    public UserAccount(Long id, String username, String pwd, Collection<AppRole> appRoles) {
24
+        this.id = id;
25
+        this.username = username;
26
+        this.pwd = pwd;
27
+        this.appRoles = appRoles;
28
+    }
29
+
30
+    public Long getId() {
31
+        return id;
32
+    }
33
+
34
+    public void setId(Long id) {
35
+        this.id = id;
36
+    }
37
+
38
+    public String getUsername() {
39
+        return username;
40
+    }
41
+
42
+    public void setUsername(String username) {
43
+        this.username = username;
44
+    }
45
+
46
+    public String getPwd() {
47
+        return pwd;
48
+    }
49
+
50
+    public void setPwd(String pwd) {
51
+        this.pwd = pwd;
52
+    }
53
+
54
+    public Collection<AppRole> getAppRoles() {
55
+        return appRoles;
56
+    }
57
+
58
+    public void setAppRoles(Collection<AppRole> appRoles) {
59
+        this.appRoles = appRoles;
60
+    }
61
+}

+ 28
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/models/UserAccountRoleForm.java Voir le fichier

@@ -0,0 +1,28 @@
1
+package fr.natan.microservices.springsecurityserverjwt.models;
2
+
3
+public class UserAccountRoleForm {
4
+
5
+    private String username;
6
+    private String roleName;
7
+
8
+    public UserAccountRoleForm(String username, String roleName) {
9
+        this.username = username;
10
+        this.roleName = roleName;
11
+    }
12
+
13
+    public String getUsername() {
14
+        return username;
15
+    }
16
+
17
+    public void setUsername(String username) {
18
+        this.username = username;
19
+    }
20
+
21
+    public String getRoleName() {
22
+        return roleName;
23
+    }
24
+
25
+    public void setRoleName(String roleName) {
26
+        this.roleName = roleName;
27
+    }
28
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/AppRoleNotFoundException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class AppRoleNotFoundException extends Exception {
4
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/RoleAlreadyExistsException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class RoleAlreadyExistsException extends Exception {
4
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/RoleFieldsInvalidException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class RoleFieldsInvalidException extends Exception {
4
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountAlreadyAssignedThatRoleException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class UserAccountAlreadyAssignedThatRoleException extends Exception {
4
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountAlreadyExistsException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class UserAccountAlreadyExistsException extends Exception {
4
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountFieldsInvalidException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class UserAccountFieldsInvalidException extends Exception {
4
+}

+ 4
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/businessExceptions/UserAccountNotFoundException.java Voir le fichier

@@ -0,0 +1,4 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions;
2
+
3
+public class UserAccountNotFoundException extends Exception {
4
+}

+ 53
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/moduleExceptions/exceptionHandler/AccountExceptionHandler.java Voir le fichier

@@ -0,0 +1,53 @@
1
+package fr.natan.microservices.springsecurityserverjwt.moduleExceptions.exceptionHandler;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions.*;
4
+import org.springframework.http.HttpStatus;
5
+import org.springframework.http.ResponseEntity;
6
+import org.springframework.web.bind.annotation.ControllerAdvice;
7
+import org.springframework.web.bind.annotation.ExceptionHandler;
8
+
9
+@ControllerAdvice
10
+public class AccountExceptionHandler {
11
+
12
+    @ExceptionHandler(value = UserAccountAlreadyExistsException.class)
13
+    private ResponseEntity<String> handleUserAccountAlreadyExistsException() {
14
+        return new ResponseEntity<>("UserAccount Already Exists Exception",
15
+                HttpStatus.NOT_ACCEPTABLE);
16
+    }
17
+
18
+    @ExceptionHandler(value = RoleAlreadyExistsException.class)
19
+    private ResponseEntity<String> handleRoleAlreadyExistsException() {
20
+        return new ResponseEntity<>("Role Already Exists Exception",
21
+                HttpStatus.NOT_ACCEPTABLE);
22
+    }
23
+
24
+    @ExceptionHandler(value = UserAccountFieldsInvalidException.class)
25
+    private ResponseEntity<String> handleUserAccountFieldsInvalidException() {
26
+        return new ResponseEntity<>("UserAccount Fields' Values Invalid Exception",
27
+                HttpStatus.NOT_ACCEPTABLE);
28
+    }
29
+
30
+    @ExceptionHandler(value = RoleFieldsInvalidException.class)
31
+    private ResponseEntity<String> handleRoleFieldsInvalidException() {
32
+        return new ResponseEntity<>("Role Fields' Values Invalid Exception",
33
+                HttpStatus.NOT_ACCEPTABLE);
34
+    }
35
+
36
+    @ExceptionHandler(value = AppRoleNotFoundException.class)
37
+    private ResponseEntity<String> handleAppRoleNotFoundException() {
38
+        return new ResponseEntity<>("Role Not Found Exception",
39
+                HttpStatus.NOT_FOUND);
40
+    }
41
+
42
+    @ExceptionHandler(value = UserAccountNotFoundException.class)
43
+    private ResponseEntity<String> handleUserAccountNotFoundException() {
44
+        return new ResponseEntity<>("User Account Not Found Exception",
45
+                HttpStatus.NOT_FOUND);
46
+    }
47
+
48
+    @ExceptionHandler(value = UserAccountAlreadyAssignedThatRoleException.class)
49
+    private ResponseEntity<String> handleUserAccountAlreadyAssignedThatRoleException() {
50
+        return new ResponseEntity<>("UserAccount Already Assigned that Role Exception",
51
+                HttpStatus.NOT_ACCEPTABLE);
52
+    }
53
+}

+ 9
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/repositories/RoleRepo.java Voir le fichier

@@ -0,0 +1,9 @@
1
+package fr.natan.microservices.springsecurityserverjwt.repositories;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.AppRole;
4
+import org.springframework.data.jpa.repository.JpaRepository;
5
+
6
+
7
+public interface RoleRepo extends JpaRepository<AppRole, Long> {
8
+    AppRole findByRoleName(String roleName);
9
+}

+ 8
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/repositories/UserAccountRepo.java Voir le fichier

@@ -0,0 +1,8 @@
1
+package fr.natan.microservices.springsecurityserverjwt.repositories;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccount;
4
+import org.springframework.data.jpa.repository.JpaRepository;
5
+
6
+public interface UserAccountRepo extends JpaRepository<UserAccount, Long> {
7
+    UserAccount findByUsername(String username);
8
+}

+ 20
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/service/services/AccountService.java Voir le fichier

@@ -0,0 +1,20 @@
1
+package fr.natan.microservices.springsecurityserverjwt.service.services;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.AppRole;
4
+import fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions.*;
5
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccount;
6
+
7
+import java.util.Collection;
8
+
9
+public interface AccountService {
10
+    UserAccount addNewUserAccount(UserAccount userAccount) throws UserAccountAlreadyExistsException,
11
+            UserAccountFieldsInvalidException;
12
+    UserAccount getUserByUsername(String username) throws UserAccountNotFoundException;
13
+    Collection<UserAccount> loadAllUsers();
14
+    Collection<AppRole> loadAllRoles();
15
+    AppRole addNewRole(AppRole appRole) throws RoleAlreadyExistsException, RoleFieldsInvalidException;
16
+    AppRole getRoleByRoleName(String  roleName) throws  AppRoleNotFoundException;
17
+    void addRoleToUser(String username, String roleName) throws AppRoleNotFoundException, UserAccountNotFoundException,
18
+            UserAccountAlreadyAssignedThatRoleException;
19
+}
20
+

+ 105
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/service/services/AccountServiceImpl.java Voir le fichier

@@ -0,0 +1,105 @@
1
+package fr.natan.microservices.springsecurityserverjwt.service.services;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.AppRole;
4
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccount;
5
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccountRoleForm;
6
+import fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions.*;
7
+import fr.natan.microservices.springsecurityserverjwt.repositories.RoleRepo;
8
+import fr.natan.microservices.springsecurityserverjwt.repositories.UserAccountRepo;
9
+import fr.natan.microservices.springsecurityserverjwt.service.utilities.UserAccountAndRolesValidator;
10
+import org.springframework.security.crypto.password.PasswordEncoder;
11
+import org.springframework.stereotype.Service;
12
+
13
+import javax.transaction.Transactional;
14
+import java.util.Collection;
15
+
16
+@Service
17
+@Transactional
18
+public class AccountServiceImpl implements AccountService {
19
+    private final UserAccountRepo userAccountRepo;
20
+    private final RoleRepo roleRepo;
21
+    private final PasswordEncoder passwordEncoder;
22
+
23
+    public AccountServiceImpl(UserAccountRepo userAccountRepo, RoleRepo roleRepo,
24
+                              PasswordEncoder passwordEncoder) {
25
+        this.userAccountRepo = userAccountRepo;
26
+        this.roleRepo = roleRepo;
27
+        this.passwordEncoder = passwordEncoder;
28
+    }
29
+
30
+    @Override
31
+    public UserAccount addNewUserAccount(UserAccount userAccount) throws UserAccountAlreadyExistsException,
32
+            UserAccountFieldsInvalidException {
33
+
34
+        if (!UserAccountAndRolesValidator.isValidUserAccount(userAccount)) {
35
+            throw new UserAccountFieldsInvalidException();
36
+        }
37
+        UserAccount formattedUserAccount = UserAccountAndRolesValidator.formatUserAccount(userAccount);
38
+
39
+        if (getUserByUsername(formattedUserAccount.getUsername())!=null) {
40
+            throw new UserAccountAlreadyExistsException();
41
+        }
42
+
43
+        String password = formattedUserAccount.getPwd();
44
+        formattedUserAccount.setPwd(passwordEncoder.encode(password));
45
+
46
+
47
+        return userAccountRepo.save(formattedUserAccount);
48
+    }
49
+
50
+    @Override
51
+    public UserAccount getUserByUsername(String username) {
52
+       UserAccount userAccount =  userAccountRepo.findByUsername(username);
53
+
54
+        return userAccount;
55
+    }
56
+
57
+    @Override
58
+    public Collection<UserAccount> loadAllUsers() {
59
+        return userAccountRepo.findAll();
60
+    }
61
+
62
+    @Override
63
+    public Collection<AppRole> loadAllRoles() {
64
+        return roleRepo.findAll();
65
+    }
66
+
67
+    @Override
68
+    public AppRole addNewRole(AppRole appRole) throws RoleAlreadyExistsException, RoleFieldsInvalidException {
69
+        if (!UserAccountAndRolesValidator.isValidRole(appRole)) {
70
+            throw new RoleFieldsInvalidException();
71
+        }
72
+        AppRole formattedAppRole = UserAccountAndRolesValidator.formatRoles(appRole);
73
+
74
+        if (getRoleByRoleName(formattedAppRole.getRoleName())!=null) {
75
+            throw new RoleAlreadyExistsException();
76
+        }
77
+        return roleRepo.save(formattedAppRole);
78
+    }
79
+
80
+    @Override
81
+    public AppRole getRoleByRoleName(String roleName) {
82
+        AppRole appRole = roleRepo.findByRoleName(roleName);
83
+        return appRole;
84
+    }
85
+
86
+    @Override
87
+    public void addRoleToUser(String username, String roleName) throws AppRoleNotFoundException,
88
+            UserAccountNotFoundException, UserAccountAlreadyAssignedThatRoleException {
89
+        AppRole appRole = getRoleByRoleName(roleName);
90
+        if(appRole==null){
91
+            throw new AppRoleNotFoundException();
92
+        }
93
+       UserAccount userAccount =  getUserByUsername(username);
94
+        if(userAccount==null){
95
+            throw new UserAccountNotFoundException();
96
+        }
97
+
98
+        if(userAccount.getAppRoles().contains(appRole)){
99
+            throw new UserAccountAlreadyAssignedThatRoleException();
100
+        }
101
+        userAccount.getAppRoles().add(appRole);
102
+
103
+        new UserAccountRoleForm(username, roleName);
104
+    }
105
+}

+ 33
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/service/utilities/UserAccountAndRolesValidator.java Voir le fichier

@@ -0,0 +1,33 @@
1
+package fr.natan.microservices.springsecurityserverjwt.service.utilities;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.AppRole;
4
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccount;
5
+
6
+public class UserAccountAndRolesValidator {
7
+
8
+    public static UserAccount formatUserAccount(UserAccount userAccount){
9
+        userAccount.setUsername(userAccount.getUsername().strip().toLowerCase());
10
+        return  userAccount;
11
+    }
12
+
13
+    public static boolean isValidUserAccount(UserAccount userAccount){
14
+        if(userAccount.getUsername().isEmpty() || userAccount.getPwd().isEmpty()){
15
+            return false;
16
+        }
17
+
18
+        return true;
19
+    }
20
+
21
+    public static AppRole formatRoles(AppRole appRole){
22
+
23
+        appRole.setRoleName(appRole.getRoleName().strip().toUpperCase());
24
+        return appRole;
25
+    }
26
+
27
+    public static boolean isValidRole(AppRole appRole){
28
+        if(appRole.getRoleName().isEmpty()){
29
+            return false;
30
+        }
31
+        return true;
32
+    }
33
+}

+ 42
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/a_userCreation/MyUserDetailsServiceImpl.java Voir le fichier

@@ -0,0 +1,42 @@
1
+package fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.a_userCreation;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.AppRole;
4
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccount;
5
+import fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions.UserAccountNotFoundException;
6
+import fr.natan.microservices.springsecurityserverjwt.service.services.AccountService;
7
+import org.springframework.security.core.GrantedAuthority;
8
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
9
+import org.springframework.security.core.userdetails.User;
10
+import org.springframework.security.core.userdetails.UserDetails;
11
+import org.springframework.security.core.userdetails.UserDetailsService;
12
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
13
+
14
+import java.util.ArrayList;
15
+import java.util.Collection;
16
+
17
+public class MyUserDetailsServiceImpl implements UserDetailsService {
18
+    private final AccountService accountService;
19
+
20
+    public MyUserDetailsServiceImpl(AccountService accountService) {
21
+        this.accountService = accountService;
22
+    }
23
+
24
+    //création d'utilisateur spring pour s'authentifier
25
+    @Override
26
+    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
27
+        UserAccount userAccount = null;
28
+        try {
29
+            userAccount = accountService.getUserByUsername(username);
30
+        } catch (UserAccountNotFoundException e) {
31
+            e.printStackTrace();
32
+        }
33
+        assert userAccount!=null;
34
+        Collection<AppRole> appRoles = userAccount.getAppRoles();
35
+        Collection<GrantedAuthority> grantedAuthorities = new ArrayList<>();
36
+        for(AppRole appRole : appRoles){
37
+            grantedAuthorities.add(new SimpleGrantedAuthority(appRole.getRoleName()));
38
+        }
39
+
40
+        return new User(userAccount.getUsername(), userAccount.getPwd(), grantedAuthorities);
41
+    }
42
+}

+ 18
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/b_authenticationFilter/FinalVariables.java Voir le fichier

@@ -0,0 +1,18 @@
1
+package fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.b_authenticationFilter;
2
+
3
+import javax.swing.plaf.PanelUI;
4
+
5
+public class FinalVariables {
6
+    public static final String USERNAME ="username";
7
+    public static final String PWD="pwd";
8
+    public static final String SECRET="mon secret";
9
+    public static final String AUTHORIZATION ="Authorization";
10
+    public static final String ROLES="roles";
11
+    public static final String ACCESS_TOKEN = "jwt-access-token";
12
+    public static final String REFRESH_TOKEN = "jwt-refresh-token";
13
+    public static final long REFRESH_TOKEN_EXPIRED_AT = 3600000;//1h
14
+    public static final long ACCESS_TOKEN_EXPIRED_AT = 1800000;//30mi,
15
+    public static final String START_WITH = "Bearer ";
16
+    public static final String [] AUTHORITIES = {"USER","CTO", "CEO","HR","COMMUNICATION","OTHER-ROLES"};
17
+    public static final String [] ENDPOINTS = {"/users/**","/roles/**","/add-role-to-user/**"};
18
+}

+ 85
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/b_authenticationFilter/JWTAuthenticationFilter.java Voir le fichier

@@ -0,0 +1,85 @@
1
+package fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.b_authenticationFilter;
2
+
3
+import com.auth0.jwt.JWT;
4
+import com.auth0.jwt.algorithms.Algorithm;
5
+import com.fasterxml.jackson.databind.ObjectMapper;
6
+import org.springframework.security.authentication.AuthenticationManager;
7
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
8
+import org.springframework.security.core.Authentication;
9
+import org.springframework.security.core.AuthenticationException;
10
+import org.springframework.security.core.userdetails.User;
11
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
12
+
13
+import javax.servlet.FilterChain;
14
+import javax.servlet.http.HttpServletRequest;
15
+import javax.servlet.http.HttpServletResponse;
16
+import java.io.IOException;
17
+import java.time.Instant;
18
+import java.util.Date;
19
+import java.util.HashMap;
20
+import java.util.Map;
21
+import java.util.stream.Collectors;
22
+
23
+import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;
24
+
25
+
26
+public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
27
+    private final AuthenticationManager authenticationManager;
28
+
29
+    public JWTAuthenticationFilter(AuthenticationManager authenticationManager) {
30
+        this.authenticationManager = authenticationManager;
31
+    }
32
+
33
+    //la methode attemptAuthentication crée un object de type Authentication contenant login et password
34
+    @Override
35
+    public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
36
+            throws AuthenticationException {
37
+        String username = request.getParameter(FinalVariables.USERNAME);
38
+        String password = request.getParameter(FinalVariables.PWD);
39
+        UsernamePasswordAuthenticationToken authenticationToken = new
40
+                UsernamePasswordAuthenticationToken(username, password);
41
+
42
+        return authenticationManager.authenticate(authenticationToken);
43
+    }
44
+
45
+
46
+    //si l'authentification a réussi, Spring Chain Filter récupère le user authentifié
47
+    // et construit le JWT
48
+    @Override
49
+    protected void successfulAuthentication(
50
+            HttpServletRequest request, HttpServletResponse response,
51
+            FilterChain chain, Authentication authResult
52
+    ) throws IOException {
53
+
54
+        User user = (User) authResult.getPrincipal();//récupération du user authentifié
55
+        //on commence ici la création du JWT
56
+        Algorithm algorithm = Algorithm.HMAC256(FinalVariables.SECRET.getBytes());
57
+        Instant now = Instant.now();
58
+        String JWTAccessToken = JWT.create()
59
+                .withSubject(user.getUsername())
60
+                .withIssuedAt(Date.from(now))
61
+                .withExpiresAt(now.plusMillis(FinalVariables.ACCESS_TOKEN_EXPIRED_AT))
62
+                .withIssuer(request.getRequestURL().toString())
63
+                .withClaim(FinalVariables.ROLES, user.getAuthorities().stream()
64
+                        .map(grantedAuthority -> grantedAuthority.getAuthority())
65
+                        .collect(Collectors.toList()))
66
+                .sign(algorithm);
67
+
68
+
69
+        String JWTRefreshToken = JWT.create()
70
+                .withSubject(user.getUsername())
71
+                .withIssuedAt(Date.from(now))
72
+                .withExpiresAt(Date.from(now.plusMillis(FinalVariables.REFRESH_TOKEN_EXPIRED_AT)))
73
+                .withIssuer(request.getRequestURL().toString())
74
+                .sign(algorithm);
75
+        Map<String, String> tokens = new HashMap<>(){
76
+            {
77
+                put(FinalVariables.ACCESS_TOKEN, JWTAccessToken);
78
+                put(FinalVariables.REFRESH_TOKEN, JWTRefreshToken);
79
+            }
80
+        };
81
+        response.setContentType(APPLICATION_JSON_VALUE);
82
+        new ObjectMapper().writeValue(response.getOutputStream(),tokens);
83
+    }
84
+}
85
+

+ 69
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/t_authenticationFilter/c_filterConfig/SpringFilterChain.java Voir le fichier

@@ -0,0 +1,69 @@
1
+package fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.c_filterConfig;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.service.services.AccountService;
4
+import fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.a_userCreation.MyUserDetailsServiceImpl;
5
+import fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.b_authenticationFilter.FinalVariables;
6
+import fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.b_authenticationFilter.JWTAuthenticationFilter;
7
+import fr.natan.microservices.springsecurityserverjwt.tt_authorizationFilter.JWTAuthorizationFilter;
8
+import org.springframework.context.annotation.Bean;
9
+import org.springframework.context.annotation.Configuration;
10
+import org.springframework.security.authentication.AuthenticationManager;
11
+import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
12
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
13
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
14
+import org.springframework.security.config.http.SessionCreationPolicy;
15
+import org.springframework.security.web.SecurityFilterChain;
16
+import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
17
+
18
+import static org.springframework.http.HttpMethod.GET;
19
+import static org.springframework.http.HttpMethod.POST;
20
+
21
+@Configuration
22
+@EnableWebSecurity
23
+public class SpringFilterChain {
24
+
25
+    //configuration des droits d'accès aux endpoints des request avec HttpSecurity
26
+    //Dans cette méthode securityFilterChain(), on y met toutes les filtres définis
27
+    @Bean
28
+    public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
29
+
30
+        SecurityFilterChain filteredSecurityChain =
31
+                httpSecurity
32
+                        .csrf(csrf -> csrf.disable())
33
+                        .headers(header -> header.frameOptions().disable())
34
+                        .sessionManagement(session -> session
35
+                                .sessionCreationPolicy(SessionCreationPolicy.STATELESS))
36
+                        .authorizeHttpRequests(httpRequest ->
37
+                                httpRequest
38
+                                        .antMatchers(GET, FinalVariables.ENDPOINTS[0]).hasAnyAuthority(
39
+                                                FinalVariables.AUTHORITIES
40
+                                        )
41
+                                        .antMatchers(POST, FinalVariables.ENDPOINTS[0]).hasAnyAuthority(
42
+                                                FinalVariables.AUTHORITIES[1],
43
+                                                FinalVariables.AUTHORITIES[2],
44
+                                                FinalVariables.AUTHORITIES[3])
45
+                                        .anyRequest().authenticated()
46
+                        )
47
+                        //ajout du filtre d'authentification
48
+                        .addFilter(new JWTAuthenticationFilter(authenticationManager()))
49
+                        .addFilterBefore(new JWTAuthorizationFilter(), UsernamePasswordAuthenticationFilter.class)
50
+                        .build();
51
+        return filteredSecurityChain;
52
+    }
53
+
54
+    //appel du UserDetails service pour construire un user Spring
55
+    @Bean
56
+    public MyUserDetailsServiceImpl configureUser(AccountService accountService) {
57
+        return new MyUserDetailsServiceImpl(accountService);
58
+    }
59
+
60
+    private final AuthenticationConfiguration authenticationConfiguration;
61
+
62
+    public SpringFilterChain(AuthenticationConfiguration authenticationConfiguration) {
63
+        this.authenticationConfiguration = authenticationConfiguration;
64
+    }
65
+
66
+    public AuthenticationManager authenticationManager() throws Exception {
67
+        return authenticationConfiguration.getAuthenticationManager();
68
+    }
69
+}

+ 60
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/tt_authorizationFilter/JWTAuthorizationFilter.java Voir le fichier

@@ -0,0 +1,60 @@
1
+package fr.natan.microservices.springsecurityserverjwt.tt_authorizationFilter;
2
+
3
+import com.auth0.jwt.JWT;
4
+import com.auth0.jwt.JWTVerifier;
5
+import com.auth0.jwt.algorithms.Algorithm;
6
+import com.auth0.jwt.interfaces.DecodedJWT;
7
+import fr.natan.microservices.springsecurityserverjwt.t_authenticationFilter.b_authenticationFilter.FinalVariables;
8
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
9
+import org.springframework.security.core.GrantedAuthority;
10
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
11
+import org.springframework.security.core.context.SecurityContextHolder;
12
+import org.springframework.web.filter.OncePerRequestFilter;
13
+
14
+import javax.servlet.FilterChain;
15
+import javax.servlet.ServletException;
16
+import javax.servlet.http.HttpServletRequest;
17
+import javax.servlet.http.HttpServletResponse;
18
+import java.io.IOException;
19
+import java.util.ArrayList;
20
+import java.util.Collection;
21
+import java.util.List;
22
+
23
+
24
+public class JWTAuthorizationFilter extends OncePerRequestFilter {
25
+    @Override
26
+    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
27
+            throws ServletException, IOException {
28
+        //get JWT send by client
29
+        String jwtAccessToken = request.getHeader(FinalVariables.AUTHORIZATION);
30
+        if(jwtAccessToken!=null && jwtAccessToken.startsWith(FinalVariables.START_WITH)){
31
+           try {
32
+               String jwtToken = jwtAccessToken.substring(FinalVariables.START_WITH.length());
33
+               Algorithm algorithm = Algorithm.HMAC256(FinalVariables.SECRET.getBytes());
34
+               JWTVerifier jwtVerifier = JWT.require(algorithm).build();
35
+               DecodedJWT decodedJWT = jwtVerifier.verify(jwtToken);
36
+               //if decodedJWT is valid, that is, not expired, ...do else catch
37
+               String username = decodedJWT.getSubject();
38
+               String [] roles = decodedJWT.getClaim(FinalVariables.ROLES).asArray(String.class);
39
+               List<GrantedAuthority> grantedAuthorities = new ArrayList<>();
40
+              for(String role: roles){
41
+                  grantedAuthorities.add(new SimpleGrantedAuthority(role));
42
+              }
43
+               //pour vérifier l'utilisateur, le pwd n'est pas nécessaire, ici null,
44
+               //on a juste besoin du username et ses roles
45
+               UsernamePasswordAuthenticationToken usernamePasswordAuthenticationToken =
46
+                       new UsernamePasswordAuthenticationToken(username, null, grantedAuthorities);
47
+               SecurityContextHolder.getContext().setAuthentication(usernamePasswordAuthenticationToken);
48
+               filterChain.doFilter(request, response);
49
+
50
+
51
+           }catch (Exception exception){
52
+               response.setHeader("error-message", exception.getMessage());
53
+           }
54
+        }
55
+        else{
56
+            //go to the next request if exists
57
+            filterChain.doFilter(request,response);
58
+        }
59
+    }
60
+}

+ 56
- 0
src/main/java/fr/natan/microservices/springsecurityserverjwt/web/AccountController.java Voir le fichier

@@ -0,0 +1,56 @@
1
+package fr.natan.microservices.springsecurityserverjwt.web;
2
+
3
+import fr.natan.microservices.springsecurityserverjwt.models.AppRole;
4
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccount;
5
+import fr.natan.microservices.springsecurityserverjwt.models.UserAccountRoleForm;
6
+import fr.natan.microservices.springsecurityserverjwt.moduleExceptions.businessExceptions.*;
7
+import fr.natan.microservices.springsecurityserverjwt.service.services.AccountService;
8
+import org.springframework.security.access.prepost.PostAuthorize;
9
+import org.springframework.web.bind.annotation.RequestBody;
10
+import org.springframework.web.bind.annotation.RequestMapping;
11
+import org.springframework.web.bind.annotation.RequestMethod;
12
+import org.springframework.web.bind.annotation.RestController;
13
+
14
+import java.security.Principal;
15
+import java.util.Collection;
16
+
17
+@RestController
18
+public class AccountController {
19
+    private final AccountService accountService;
20
+
21
+    public AccountController(AccountService accountService) {
22
+        this.accountService = accountService;
23
+    }
24
+
25
+    @RequestMapping(value = "/users", method = RequestMethod.POST)
26
+    private UserAccount createUserAccount(@RequestBody UserAccount userAccount)
27
+            throws UserAccountAlreadyExistsException, UserAccountFieldsInvalidException {
28
+        return accountService.addNewUserAccount(userAccount);
29
+    }
30
+
31
+    @RequestMapping(value = "/roles", method = RequestMethod.POST)
32
+    private AppRole createRole(@RequestBody AppRole appRole) throws RoleAlreadyExistsException, RoleFieldsInvalidException {
33
+        return accountService.addNewRole(appRole);
34
+    }
35
+
36
+    @RequestMapping(value = "/add-role-to-user", method = RequestMethod.POST)
37
+    private void addRoleToUser(@RequestBody UserAccountRoleForm userAccountRoleForm) throws AppRoleNotFoundException,
38
+            UserAccountNotFoundException, UserAccountAlreadyAssignedThatRoleException {
39
+        accountService.addRoleToUser(userAccountRoleForm.getUsername(), userAccountRoleForm.getRoleName());
40
+    }
41
+
42
+    @RequestMapping(value = "/users", method = RequestMethod.GET)
43
+    private Collection<UserAccount> listUserAccounts(){
44
+        return accountService.loadAllUsers();
45
+    }
46
+
47
+    @RequestMapping(value = "/roles", method = RequestMethod.GET)
48
+    private Collection<AppRole> listRoles(){
49
+        return accountService.loadAllRoles();
50
+    }
51
+
52
+    @RequestMapping(value = "/profil", method = RequestMethod.GET)
53
+    private UserAccount getProfil(Principal principal) throws UserAccountNotFoundException {
54
+        return accountService.getUserByUsername(principal.getName());
55
+    }
56
+}

+ 19
- 0
src/main/resources/application.yml Voir le fichier

@@ -0,0 +1,19 @@
1
+server:
2
+  port: 8186
3
+  error:
4
+    include-message: always
5
+spring:
6
+  application:
7
+    name: spring-security-jwt
8
+  datasource:
9
+    url: jdbc:mysql://localhost:3306/user-account-db?createDatabaseIfNotExist=true
10
+    username: root
11
+    password: root
12
+  jpa:
13
+    show-sql: true
14
+    hibernate:
15
+      ddl-auto: update
16
+    properties:
17
+      hibernate:
18
+        dialect: org.hibernate.dialect.MySQL8Dialect
19
+

+ 13
- 0
src/test/java/fr/natan/microservices/springsecurityserverjwt/SpringSecurityServerJwtApplicationTests.java Voir le fichier

@@ -0,0 +1,13 @@
1
+package fr.natan.microservices.springsecurityserverjwt;
2
+
3
+import org.junit.jupiter.api.Test;
4
+import org.springframework.boot.test.context.SpringBootTest;
5
+
6
+@SpringBootTest
7
+class SpringSecurityServerJwtApplicationTests {
8
+
9
+	@Test
10
+	void contextLoads() {
11
+	}
12
+
13
+}

Powered by TurnKey Linux.