From 59e56afd19e62b4123e47a49541f58560bc94cf6 Mon Sep 17 00:00:00 2001 From: Selvaraj1818 Date: Mon, 8 Apr 2024 21:52:50 -0700 Subject: [PATCH 1/2] Commit to branch2 --- bin/.gitignore | 31 ++ bin/.mvn/wrapper/MavenWrapperDownloader.class | Bin 0 -> 4899 bytes bin/.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 48337 bytes bin/.mvn/wrapper/maven-wrapper.properties | 1 + bin/README.md | 206 +++++++++++++ bin/mvnw | 286 ++++++++++++++++++ bin/mvnw.cmd | 161 ++++++++++ bin/pom.xml | 91 ++++++ ...ntication-spring-security-architecture.png | Bin 0 -> 25362 bytes ...wt-authentication-spring-security-flow.png | Bin 0 -> 27417 bytes ...ng-boot-refresh-token-jwt-example-flow.png | Bin 0 -> 30571 bytes .../SpringBootSecurityJwtApplication.class | Bin 0 -> 1334 bytes .../controllers/AuthController.class | Bin 0 -> 6955 bytes .../controllers/TestController.class | Bin 0 -> 2289 bytes .../com/bezkoder/springjwt/models/ERole.class | Bin 0 -> 1036 bytes .../com/bezkoder/springjwt/models/Role.class | Bin 0 -> 2259 bytes .../com/bezkoder/springjwt/models/User.class | Bin 0 -> 4934 bytes .../payload/request/LoginRequest.class | Bin 0 -> 1839 bytes .../payload/request/SignupRequest.class | Bin 0 -> 3346 bytes .../payload/response/JwtResponse.class | Bin 0 -> 4105 bytes .../payload/response/MessageResponse.class | Bin 0 -> 1352 bytes .../springjwt/repository/RoleRepository.class | Bin 0 -> 1307 bytes .../springjwt/repository/UserRepository.class | Bin 0 -> 1558 bytes .../security/WebSecurityConfig.class | Bin 0 -> 5544 bytes .../security/jwt/AuthEntryPointJwt.class | Bin 0 -> 3329 bytes .../security/jwt/AuthTokenFilter.class | Bin 0 -> 4111 bytes .../springjwt/security/jwt/JwtUtils.class | Bin 0 -> 4627 bytes .../security/services/UserDetailsImpl.class | Bin 0 -> 5908 bytes .../services/UserDetailsServiceImpl.class | Bin 0 -> 2344 bytes bin/src/main/resources/application.properties | 10 + ...pringBootSecurityJwtApplicationTests.class | Bin 0 -> 1120 bytes .../com/bezkoder/springjwt/models/User.java | 1 + 32 files changed, 787 insertions(+) create mode 100644 bin/.gitignore create mode 100644 bin/.mvn/wrapper/MavenWrapperDownloader.class create mode 100644 bin/.mvn/wrapper/maven-wrapper.jar create mode 100644 bin/.mvn/wrapper/maven-wrapper.properties create mode 100644 bin/README.md create mode 100644 bin/mvnw create mode 100644 bin/mvnw.cmd create mode 100644 bin/pom.xml create mode 100644 bin/spring-boot-jwt-authentication-spring-security-architecture.png create mode 100644 bin/spring-boot-jwt-authentication-spring-security-flow.png create mode 100644 bin/spring-boot-refresh-token-jwt-example-flow.png create mode 100644 bin/src/main/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplication.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/controllers/AuthController.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/controllers/TestController.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/models/ERole.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/models/Role.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/models/User.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/payload/request/LoginRequest.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/payload/response/MessageResponse.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/repository/RoleRepository.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/repository/UserRepository.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/security/jwt/AuthEntryPointJwt.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/security/jwt/AuthTokenFilter.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/security/jwt/JwtUtils.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.class create mode 100644 bin/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.class create mode 100644 bin/src/main/resources/application.properties create mode 100644 bin/src/test/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplicationTests.class diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..a2a3040 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1,31 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/** +!**/src/test/** + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ + +### VS Code ### +.vscode/ diff --git a/bin/.mvn/wrapper/MavenWrapperDownloader.class b/bin/.mvn/wrapper/MavenWrapperDownloader.class new file mode 100644 index 0000000000000000000000000000000000000000..b4268f03d1bb46bb78d7c6f67595db26460ee07e GIT binary patch literal 4899 zcmeHLZEqVz5S~p<{X$Ag+6LOtvZMr(Lheeagwz6(X&e#c#8KiTDtxdu=S_U+-R`ls z=QMwbKY#=heCJ0YX73!wZm;$RQb33gKHuCv`^?Pl?9AN#_WMu20KgaUX%Qv}+;zgP zaE}#>BCgzZ*5zU^6ISH02qbHBRfGb8t4FNM+<=Kgx3Pc3Jx$>HN^P~eQ*X9b8hab{ zMs=mNvsEWBT|a|vYvqf>M+B}smLk?n=v@{hyaZ(e-*&W);)kxQcqEV?R%>&sfq%`l z+IDNR+Wfi%lLY36Tu;@VvOAHIxE|W)F@c$3s&A@DmvT%IxHEzywc}<_^OM#_b-mWN z2N$XY(*!C#cXm`j;PU6b@b#AjE-ftX5-2>DZC-@82uz(VXiX`pN^p~ur+0+nu?)Jr zO+6V#e!#RZ1x3^M10Kc?X{FrkaN6cxz!ZXTX`iw~PUq%mTk@C+scFcx*P$9={8@yX zItVkaIX(O4GA?}*acYclOdvQ}AW)A9!?n-psX-21)6|ctFWSCB+Ta9-4!GjNLk$N? zhA4lZ;8>eFXkHxC13%z#u9jv;$zz5-UAQ7YjHJ?;L%z(R&+PffVS;Nbm|*zf*;a|CrJ`9(EG(MsPehv^_`+;Cj^I5@0`%kz?a=ik)@B4z zlnE1s8Swz9QqHnSjwMt}%BYFTe<|oB);!EHyi#7pc+VLa^vD9T{mK=j34Dy97q>sg zT^GAU<4L6gGcY>|*WeujHx^!OLrqsTRmW1Zk%aqPHO(Z` zuS$;vyFHTL!-DSk*!#`bhZ?;6{utZaLdbl9t>VIWd0I>GJ}I~s{n}qWHWndf0U2?^ zEM{9k?A)|DQ&vpIBKtCNKD2eMum)PW^nXzqeBBsKQX_)*!iQdIQ6X@x-FpQ$A-Re# zP3i0PY))dU8^j}%-YWeP5*J~SK)ElM;3GnQxTqv#6uvYeXAOB@^BCOtQZ*j&A1r3L zm)kN?9yd!(U^c(@;Ma~WD}sw9$l!|b$sV0!_1TEw||6Nzoxvm z@oKaH{_fy)GQF?ByFgJYqdjvyhI>N{cXJp%OBp6`UJ2&m1GM@>yf5JVh13SaU`8_= a?&UCa`V15BF(M~m36@j7OUU8C{XYO_Ku1yl literal 0 HcmV?d00001 diff --git a/bin/.mvn/wrapper/maven-wrapper.jar b/bin/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..01e67997377a393fd672c7dcde9dccbedf0cb1e9 GIT binary patch literal 48337 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 + org.postgresql + postgresql + runtime + +``` +– or MySQL: +```xml + + com.mysql + mysql-connector-j + runtime + +``` +## Configure Spring Datasource, JPA, App properties +Open `src/main/resources/application.properties` +- For PostgreSQL: +``` +spring.datasource.url= jdbc:postgresql://localhost:5432/testdb +spring.datasource.username= postgres +spring.datasource.password= 123 + +spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true +spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.PostgreSQLDialect + +# Hibernate ddl auto (create, create-drop, validate, update) +spring.jpa.hibernate.ddl-auto= update + +# App Properties +bezkoder.app.jwtSecret= bezKoderSecretKey +bezkoder.app.jwtExpirationMs= 86400000 +``` +- For MySQL +``` +spring.datasource.url=jdbc:mysql://localhost:3306/testdb_spring?useSSL=false +spring.datasource.username=root +spring.datasource.password=123456 + +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect +spring.jpa.hibernate.ddl-auto=update + +# App Properties +bezkoder.app.jwtSecret= ======================BezKoder=Spring=========================== +bezkoder.app.jwtExpirationMs=86400000 +``` +## Run Spring Boot application +``` +mvn spring-boot:run +``` + +## Run following SQL insert statements +``` +INSERT INTO roles(name) VALUES('ROLE_USER'); +INSERT INTO roles(name) VALUES('ROLE_MODERATOR'); +INSERT INTO roles(name) VALUES('ROLE_ADMIN'); +``` + +For more detail, please visit: +> [Secure Spring Boot with Spring Security & JWT Authentication](https://bezkoder.com/spring-boot-jwt-authentication/) + +> [For MongoDB](https://bezkoder.com/spring-boot-jwt-auth-mongodb/) + +## Refresh Token + +![spring-boot-refresh-token-jwt-example-flow](spring-boot-refresh-token-jwt-example-flow.png) + +For instruction: [Spring Boot Refresh Token with JWT example](https://bezkoder.com/spring-boot-refresh-token-jwt/) + +## More Practice: +> [Spring Boot JWT Authentication example using HttpOnly Cookie](https://www.bezkoder.com/spring-boot-login-example-mysql/) + +> [Spring Boot File upload example with Multipart File](https://bezkoder.com/spring-boot-file-upload/) + +> [Exception handling: @RestControllerAdvice example in Spring Boot](https://bezkoder.com/spring-boot-restcontrolleradvice/) + +> [Spring Boot Repository Unit Test with @DataJpaTest](https://bezkoder.com/spring-boot-unit-test-jpa-repo-datajpatest/) + +> [Spring Boot Pagination & Sorting example](https://www.bezkoder.com/spring-boot-pagination-sorting-example/) + +> Validation: [Spring Boot Validate Request Body](https://www.bezkoder.com/spring-boot-validate-request-body/) + +> Documentation: [Spring Boot and Swagger 3 example](https://www.bezkoder.com/spring-boot-swagger-3/) + +> Caching: [Spring Boot Redis Cache example](https://www.bezkoder.com/spring-boot-redis-cache-example/) + +Associations: +> [Spring Boot One To Many example with Spring JPA, Hibernate](https://www.bezkoder.com/jpa-one-to-many/) + +> [Spring Boot Many To Many example with Spring JPA, Hibernate](https://www.bezkoder.com/jpa-many-to-many/) + +> [JPA One To One example with Spring Boot](https://www.bezkoder.com/jpa-one-to-one/) + +Deployment: +> [Deploy Spring Boot App on AWS – Elastic Beanstalk](https://www.bezkoder.com/deploy-spring-boot-aws-eb/) + +> [Docker Compose Spring Boot and MySQL example](https://www.bezkoder.com/docker-compose-spring-boot-mysql/) + +## Fullstack Authentication + +> [Spring Boot + Vue.js JWT Authentication](https://bezkoder.com/spring-boot-vue-js-authentication-jwt-spring-security/) + +> [Spring Boot + Angular 8 JWT Authentication](https://bezkoder.com/angular-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 10 JWT Authentication](https://bezkoder.com/angular-10-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 11 JWT Authentication](https://bezkoder.com/angular-11-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 12 JWT Authentication](https://www.bezkoder.com/angular-12-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 13 JWT Authentication](https://www.bezkoder.com/angular-13-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 14 JWT Authentication](https://www.bezkoder.com/angular-14-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 15 JWT Authentication](https://www.bezkoder.com/angular-15-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 16 JWT Authentication](https://www.bezkoder.com/angular-16-spring-boot-jwt-auth/) + +> [Spring Boot + Angular 17 JWT Authentication](https://www.bezkoder.com/angular-17-spring-boot-jwt-auth/) + +> [Spring Boot + React JWT Authentication](https://bezkoder.com/spring-boot-react-jwt-auth/) + +## Fullstack CRUD App + +> [Vue.js + Spring Boot + H2 Embedded database example](https://www.bezkoder.com/spring-boot-vue-js-crud-example/) + +> [Vue.js + Spring Boot + MySQL example](https://www.bezkoder.com/spring-boot-vue-js-mysql/) + +> [Vue.js + Spring Boot + PostgreSQL example](https://www.bezkoder.com/spring-boot-vue-js-postgresql/) + +> [Angular 8 + Spring Boot + Embedded database example](https://www.bezkoder.com/angular-spring-boot-crud/) + +> [Angular 8 + Spring Boot + MySQL example](https://bezkoder.com/angular-spring-boot-crud/) + +> [Angular 8 + Spring Boot + PostgreSQL example](https://bezkoder.com/angular-spring-boot-postgresql/) + +> [Angular 10 + Spring Boot + MySQL example](https://bezkoder.com/angular-10-spring-boot-crud/) + +> [Angular 10 + Spring Boot + PostgreSQL example](https://bezkoder.com/angular-10-spring-boot-postgresql/) + +> [Angular 11 + Spring Boot + MySQL example](https://bezkoder.com/angular-11-spring-boot-crud/) + +> [Angular 11 + Spring Boot + PostgreSQL example](https://bezkoder.com/angular-11-spring-boot-postgresql/) + +> [Angular 12 + Spring Boot + Embedded database example](https://www.bezkoder.com/angular-12-spring-boot-crud/) + +> [Angular 12 + Spring Boot + MySQL example](https://www.bezkoder.com/angular-12-spring-boot-mysql/) + +> [Angular 12 + Spring Boot + PostgreSQL example](https://www.bezkoder.com/angular-12-spring-boot-postgresql/) + +> [Angular 13 + Spring Boot + H2 Embedded Database example](https://www.bezkoder.com/spring-boot-angular-13-crud/) + +> [Angular 13 + Spring Boot + MySQL example](https://www.bezkoder.com/spring-boot-angular-13-mysql/) + +> [Angular 13 + Spring Boot + PostgreSQL example](https://www.bezkoder.com/spring-boot-angular-13-postgresql/) + +> [Angular 14 + Spring Boot + H2 Embedded Database example](https://www.bezkoder.com/spring-boot-angular-14-crud/) + +> [Angular 14 + Spring Boot + MySQL example](https://www.bezkoder.com/spring-boot-angular-14-mysql/) + +> [Angular 14 + Spring Boot + PostgreSQL example](https://www.bezkoder.com/spring-boot-angular-14-postgresql/) + +> [Angular 15 + Spring Boot + H2 Embedded Database example](https://www.bezkoder.com/spring-boot-angular-15-crud/) + +> [Angular 15 + Spring Boot + MySQL example](https://www.bezkoder.com/spring-boot-angular-15-mysql/) + +> [Angular 15 + Spring Boot + PostgreSQL example](https://www.bezkoder.com/spring-boot-angular-15-postgresql/) + +> [Angular 16 + Spring Boot + H2 Embedded Database example](https://www.bezkoder.com/spring-boot-angular-16-crud/) + +> [Angular 16 + Spring Boot + MySQL example](https://www.bezkoder.com/spring-boot-angular-16-mysql/) + +> [Angular 16 + Spring Boot + PostgreSQL example](https://www.bezkoder.com/spring-boot-angular-16-postgresql/) + +> [Angular 17 + Spring Boot + H2 Embedded Database example](https://www.bezkoder.com/spring-boot-angular-17-crud/) + +> [Angular 17 + Spring Boot + MySQL example](https://www.bezkoder.com/spring-boot-angular-17-mysql/) + +> [Angular 17 + Spring Boot + PostgreSQL example](https://www.bezkoder.com/spring-boot-angular-17-postgresql/) + +> [React + Spring Boot + MySQL example](https://bezkoder.com/react-spring-boot-crud/) + +> [React + Spring Boot + PostgreSQL example](https://bezkoder.com/spring-boot-react-postgresql/) + +> [React + Spring Boot + MongoDB example](https://bezkoder.com/react-spring-boot-mongodb/) + +Run both Back-end & Front-end in one place: +> [Integrate Angular with Spring Boot Rest API](https://bezkoder.com/integrate-angular-spring-boot/) + +> [Integrate React.js with Spring Boot Rest API](https://bezkoder.com/integrate-reactjs-spring-boot/) + +> [Integrate Vue.js with Spring Boot Rest API](https://bezkoder.com/integrate-vue-spring-boot/) diff --git a/bin/mvnw b/bin/mvnw new file mode 100644 index 0000000..8b9da3b --- /dev/null +++ b/bin/mvnw @@ -0,0 +1,286 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + wget "$jarUrl" -O "$wrapperJarPath" + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + curl -o "$wrapperJarPath" "$jarUrl" + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/bin/mvnw.cmd b/bin/mvnw.cmd new file mode 100644 index 0000000..fef5a8f --- /dev/null +++ b/bin/mvnw.cmd @@ -0,0 +1,161 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar" +FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + echo Found %WRAPPER_JAR% +) else ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')" + echo Finished downloading %WRAPPER_JAR% +) +@REM End of extension + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/bin/pom.xml b/bin/pom.xml new file mode 100644 index 0000000..23a0aba --- /dev/null +++ b/bin/pom.xml @@ -0,0 +1,91 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.1.0 + + + com.bezkoder + spring-boot-security-jwt + 0.0.1-SNAPSHOT + spring-boot-security-jwt + Demo project for Spring Boot Security - JWT + + + 17 + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-security + + + + org.springframework.boot + spring-boot-starter-validation + + + + org.springframework.boot + spring-boot-starter-web + + + + com.mysql + mysql-connector-j + runtime + + + + io.jsonwebtoken + jjwt-api + 0.11.5 + + + + io.jsonwebtoken + jjwt-impl + 0.11.5 + runtime + + + + io.jsonwebtoken + jjwt-jackson + 0.11.5 + runtime + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.security + spring-security-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/bin/spring-boot-jwt-authentication-spring-security-architecture.png b/bin/spring-boot-jwt-authentication-spring-security-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..b238cb3b050b101bf27bb95f69daffd9a813b9c2 GIT binary patch literal 25362 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ˈwD(K?DG&&m?tG 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
    u(zQn$2zt7lqDsZ%0vp+xu#Li z3Oa4>nMxmtZcVJY)wuct`^Do6AEL*bsCR7(vMyg!>)bemU1gq$* z#@3`QE>2jYX1uj-vyN*uwfn%91G>FF9pQHEe&FlV_^l>I8Wl%e5lia+hp}vXsJ3+nWiXm)_ zS$<|AzGDWGw`%;{DF}J%PYg_BmzH|O&(1oh4@-Ad+>zM!2*KqV+eP3uCD{ZlsBxJ= z^Ww?D8BV9&nkhkBedgJ7z6rqxvt@&zJVNqo6KfZvl*s23bx@5+VOI|YJ&JLMRxURg zQu_LNABI5U!`ch%r)y%FhC(KJKX=xp%-ykc_qTD@35wxlhGHx_-`_KUY24n}O%(y_ zG_D=})T8X=BfQ*g0EoI+P8vRRFn|rMLeJcfSmeh!Pp4vN zSr!yrwaoL=M?|7TJhxQUbeH@?wxKUT7h}Hq$Wqg>2G8D(Mkg}LzF=c>^iM42n!2Bc z^GgT%p!j9zy|AqtE|be$<*6$DlxntREw$S>@N^7<+&}D6q@g7X-m;uCamjM-^^>Nc zv{pqs=y`GxCbFj{Q~5FKjeNwuQ8$5%w7AOg-qAe+XDCG)!QKIot6te^Z zN%}!jIG7Y>AQS!?oW$L0j~Kd~LoRrz+;H-ph`>Qs4uuO~d#R`{7w+@nKT_3@6bv^x zwZH2mI_i%!u>;9Rq}>e(Bq>3dS#v;*KSp2MF!}e}mq*&aqcXkx4EOF$=WX^nK4eQV zu?M{#xp|FEV3?WM?3!9-uxa8W#Krar9-vlzR4OOx;9T%2t&j^SJA=V*tvM4YlvOy@ zQ({Y84pnE=L@Fa)Af=#OPrEgX;4sAaOG?cb{>BAR!)%Nt2Q=T699*fD#kB#$oDzRL zPduDkG$8>n2#AvwF!)%0)ww}Qtw{Y8w;73(jEFq=rW;r%3d29B6MbxLj5V?Lx0~-x zcE^K$!qAh0sq_^1_E#Iqi2AjbgUz*y&?CokbR=XVEAERrQ0hPnm^kk0PE8zG@dsEV zCIgm)FRK~S%_o@JS41V;m>@JMKcN$@2bF|6FK>S`T6u1JiC*Lq`mB`!w)^#Ti)7vC z$an<@&Li1NIrLrJ09dbmDaL(J5|TuriD1SOwXFN{;^$}+(fX5CX*{gbrst{%KgfIy zfeop=PS=MHwRp~&1u3Pl?V|0K!4@M z$7lWm67ERR5@>(G7M-Euhr3R~cM`!X9j7q=ph9X>c=nH{AEwmIu`_X=%%(q_lBqOq z0Zw%-(P#g74LF8z2!DNwh%jAv10As|?pbbs?VC^w2CG8&P5E9Y`j;%`IL` z0!izg@Y?;WZEn^0t&!(dqo4Gec%b(ZqNDh&V{JX2Dw>;G~ec82*H`t*r_@(nao($PpF`2Xo9Nmu#j hVgHw#?|-hJoU25eUB1vVXGJ=&hKi1Ixzhco{|}$I3Ss~N literal 0 HcmV?d00001 diff --git a/bin/spring-boot-refresh-token-jwt-example-flow.png b/bin/spring-boot-refresh-token-jwt-example-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3d258a17cb2f9b9ea743822f2661c03e860f84 GIT binary patch literal 30571 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 Is<>YJ1-HkWXaE2J literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/controllers/AuthController.class b/bin/src/main/java/com/bezkoder/springjwt/controllers/AuthController.class new file mode 100644 index 0000000000000000000000000000000000000000..1637c4fc03c0f0f8f32dcf918158ee8356b39b4b GIT binary patch literal 6955 zcmeHM|8o>I6o1LG4{0o*se(4)X}kGg?Wu@u zKxa5$BDFH+R;qM~r@Sq6KxZRIzw5(XKJdDqB#SfF>NBdM34K z0ed_*LNAL<8EKV%0STfDFSm3tz`E^+#4F z7``5T-)p1)=yjP&do!TXnc2qyjV*vhNM`~%v8{(it(6|9v%&F8k5Vm+N;XA{LA{ww ziaD`ND@?LuuCaP;bzQKQh!c+Kv5dzXP!_ugbfdo*jjhFKlosP6YbjwE^u#*c#_J5K zW#V~;B`7n(8aLb;H=KN+_p!cT$r*Dl8A%i#IE9hlGD`OsL*_P=5?K7(wXZA%V>a}HI?6&{+f`86|U*cJY zP~rjK?_`OLrDZ11god+Bjn#P!56`+`WoDL1!}7Exp2!pq?g_r2&GW>T(G9kg8|%IR z#dzvGVwZ7=Wxci)P&{G{3|M}eZm{y;s!_`W9#-ILnA<0&JHq2WaqUM{54(qISQ~q^y|Cchs^#MrDQuo)QNTS+t0uK4a4(bc&^WtFc}MhD ztvcYU+7P~Nz9QmWLxpaui|6*9N{}ZF7`0wou`W#<@TsiEAs5=oeMeZ1q|12&57WJ& zBMGPQ^2Hu%Dhnu)o&?{nJY~Iht1s#tp_qbW#7e;#uaEmXMY?Eur zQHRxQ2WlI2I!*6P(n)$3rSnX*T}O63(wwU^Pee#(e#|>-La#cJ1DcLh%#+8xDfBwW z?7Bq7Iv>4aWsgF4if`BI!s#a`qM2~O?JOK@<6zM^s+i@VZgE~i{Ux_ydN989}BpmYp{a2~4S zKnmH+(GGt;-v;57%Qs5rPe8e@@+s3?NM9j~s+PRHvN@!0aIW7kMneMmWI3M+=>`(5 z9TphUE&NWXhW?P|U0>ygLP!gkL&aHyv2+xTC&5zOe1XrK+2-;oNGXq#(9mx7J zeY(Z^vtd|&K7jQP16Yqz6XJ}}7lnT7Xnl$IE4c3BnufNo(${p2uG3BWmTuFXe*l@M B7TEv* literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/controllers/TestController.class b/bin/src/main/java/com/bezkoder/springjwt/controllers/TestController.class new file mode 100644 index 0000000000000000000000000000000000000000..f6bf5cec82b9234536c6f784c2f3142d3eff5fdb GIT binary patch literal 2289 zcmeHIU2oGc6usWMwavP9belB3hM9zDd1zjEqI{^D08Ppm+RCIox~bQCOYC4fW$dr; zLy$m%cYYM&rlo7D1$7g9;DHC*@y+qcvG2|CkDp(@0l+hOl!qAtFO2rxkO}D?vp#cu z6}oMHcA`35yC%{?c8@<;3`?t35O8hW7B_b5e4d9Kf#t#4fXS}A+dk&LB{2U~NMWB7 zn61_h2;{bqF%LxoT%lP ze!w(>BIcj4E~lG_u8#!Q&jr_0f;VYLaYLoDG-THAQHwQlsDn(eLT&Di#o7H514=l>6%|1GHsbf5r>C76RH0&7)o zY#GDjY9y9Y_AvEt;;_wii=j&psCdd}!2#1Eng0&vY)=>hP46#_u0f#4f}rX9+#ug- zwRTY!f!lkrv?Ao&vM-E470tvG24;qfO5V7HkZ-Qff|wWJCV}V@1~^`O4K+o;i4E7I z?JRlenr#%|E`d+isVPl=E%M7@az`&Ot&rte~vl%F3pI`vnGWMk*3T{AU5L0 yWVrPQhC3Myl}v_>D=@5QGTgfY!$tP8nzss(8FIc&88Lr literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/models/ERole.class b/bin/src/main/java/com/bezkoder/springjwt/models/ERole.class new file mode 100644 index 0000000000000000000000000000000000000000..8790553327f938c4ddd6501a344c1ab04c4f2f64 GIT binary patch literal 1036 zcmb_b!EO^V5FIC>X_nBGKnn#9R!^;jc2&WN0%}Erh?F!^l2+n`9Iul&-L)6nTL?df z1QOi&7QO*7-n2A_3JHnBdUou$Z~SK7{`mFf8vwk3M^z{h*t3R5DU&Liv2zx2okk<^ z=}gDML^d;0O=cfllwzLPsMXhrs6vIndVx-unnbbv|3;PRX zjGwWIpxdZByqs_NXTITLzS}g`!cs3ZWsXm&!)}O=8LC_6z|n@@F=5f8zcU84cA6!U zOGj;<34@JS)|s3;ZK&_;&O-WQ?4#TD{mfM?#!~qnA_U)Ap19@DLfXx(^CyU+O!*rw zDlBma0o37k9cs`duyKuHyk8m}WH`>#kuXDs79h~sw6;)lYs-{*w8!_R*y}*}>v}uP*MTt#y z9Y}+bK@`P84J)O3DN988gc8*Y7-CTj?;M{xrsOaD;~*!?J)Sdm%po#3)wxS0*W8MQ ze)pZ~nFKQGi!mI>JUMBqbMWe3;BuQQ5=H@&*gOJzJ+hTANpg+K6~aRj35R{)f;m;P z8-+?YLA=fF5iYuZhY^YuY@I~F;QuXpa>d-uvE52_w_(&@!Hn+ zdDg;Y?nPdM$+(9NSg?GXx<~!K=}%@=i=#4aO{6w`v3XjaXjh_9n%i`fsX8j>Ot~`D z&OF>SK#ZX>E?|KuO0xyA1xO;R0GY zw2EluaV*3uGf?W!>-AZj)8jlW;QJz4j}gJZvG^Sp-!EMH3d=v^eJg!Wz|~d!)+ieL z8eGRwBiz9E03oB-CPW}H{{g~?!+Hvb$13p@m_Xz&1c}xY#9>LM{z7A)yXR%EU=#c-+_40w?ByJAw4Nj&Y*j~*R0uG zI<+Hy!fQ>}t{sTy$8Jk_HNWdgr+xHP)oj?7U)%GASD-P2rb4jAop$ZX!I5YxgL1NE z(70*3PJ79qcXt9uNn6yN6Y0wXOFVKMS8*j>$2VxqthWG~GJg<`@VFAKeQpH;uA;BB z-9E)_fYBUo3xlT3WW0vbq5v(M+pb!LhGQ7xWDvnV@YTUr6nq`AeN(_L5p!pt8E)$ABF zVQ#w8+2vRSc*mj{O&r0u=30TR*JD~bC&KfE2FA|uW$8$@f+`E(KY}WN$3~c+0tX$gd2-Xr!i+ccddGnaJ1)BxB z+6#F#4tX^S`7CR>!e@vbvpJ^26gb4QE<)bVf%U5DO;pv=s;_2@bV$4FdWwbkKuL== zx!xh{K(O9CE(<*7p5objR|Q+gK~SeDdYEz;oFjKufGBA6N{3Q@;I6*ig(ov&@ z*RgLdgrHyI`LjA07{`4V^Lr`ygnLrYyj;?G$!b7&z z2Qp|X*JIJgurkM_&jP0<4y7YnRkjuQN@vaRHS3fi-MhzvaU{IXd4_W7zhxgN?yoIq zfFyEdkk@t*{}*1$&H-0~C=;WPCTWK58g#pIu?E&<;SCchW;?JCgcsHjx>$Cb+}c0; zvYt7|R7axFoFA&P)#W}))`gUzFN(S7(emPQYM1o)AF zQY9K+i<*EaJ-4V7zXfSYMIG(_r6PT0kTrnJk)0OEg49G-5hBCFK{rM5t(N{%+{x%S z5=+0Kn-RphfH^h7=4L6nyHrb4q;Cy69AptPzpN1R>Tho}%QN}KN~m7PYB{{Ulzjbq zx#0$0Q*1~J&0R^aZrGw=G&8EpvA+vuuQ|IJyij8M1*+?I6~$?RencyVc@${tTmu~K z0JMKw()ZDt>N?1$I|MZP>^$Xgjl(LyD#I$`zl1AC6ExZ9e*?bjp?@m&Uk69ee=~eG z9Y51ty=OUklWxJj9b(>!$9fy~JGk^XGxQ#Q--mS{tOowezZ3g;diGcP@K0Dd`WU}j zDdDQ%SHGn-&(SBLZ-zdFr^hg+pAE_I8GYWzkZ7o;XqZpcaF4#|W5~rC(ik43GR)JL zeGG|)`zab0QyCu6-9CmyLmItKnLulAcWmp_S!*(je5-rEO z_F=rUl9;Td#AGLx={tH9Gp)u-X_EVUy(Hiztj=qo2&^qi5T-&&cI604Llgxhs DaM65e literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/payload/request/LoginRequest.class b/bin/src/main/java/com/bezkoder/springjwt/payload/request/LoginRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..9d6b02349a0ad81fc5f84d4ff813ce8490e19854 GIT binary patch literal 1839 zcmeHHOK%e~5FV##lWbGcrY#i8!z~<=%kG5}FR4@@RZ0u$OXBG4x`~rrd$GMO<&PnO z1b2QEVw~+GC@ay59#IrK^YG_yK4<3Vudm+$;3Yh%K#9PH(P5Am$rjroR@$}%gIGz7fPjh;tQWRhu3^n$h#=hg| zUlBTICX!TXO9yPov}H78P9)mp^t>*www0u@2!*94OS#56rLj5-t%eF7DRX02TJVUU@ zXM5ZpTuh9mR(q0K6;=tvS7_-Qdu60$#%Vc{?=NPNi(OjYp2~E{-wLPK!uW(7wS5KF z{}_`wM*{V2VGK^hee42c zxev|87g+c)I=6(YLjn9Q<66(N;5OVD`BvaAdL|L>6(H0L5$?m{7(xkAa}Gra^Mwcx duEAlc5aHo9III*Pl;9EaE&+wdxRwcnTK|H%LV literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.class b/bin/src/main/java/com/bezkoder/springjwt/payload/request/SignupRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..7e6002a457f5f391602329845dba8cec6fff360f GIT binary patch literal 3346 zcmeHJU2hyU6uq-eGP~Q*wCNWmfx0PeHxy=omhV!jg(6kj7L-jZ@#vj(H%?~k!SAi+C73UNG>Y&Psj*@y_`frp*BwvUg`{n)ww^RHijC!(+Ei;x-tJ+vl?GcHxU z$+vl&=q&Dwoh>~OCbqeeYPk8*#W{bSYCedK_^A-q#XUJxMZQ*zLYfKaY`HzA-Kly=-nt!zN;?o;g^f^ZAa zxo%JH2pFd_sr-|_3TRe9cN$RGedGwN z_N6uh9CS}A>F(o*&gydzeuF@SbUC1feFq*HqfL{p1aqgKDI=^-x5a=Va=A=P^(;3U z?qv2$)^4qD2sRK&$_+p{Pqz3_uoa-Ay*NjsI7hp2j&|d`!UkGchN!TNyJUkokcn40 z!aGie6h=OUk=GbaNnI(ES+0#^<;KFvlqK9Jf%OI3^XwnMEp8mIg+0#lR3_3fTjatZ zAj&#ZBu*Pvl|*NiNy`c~5HF;H123=wn-{4YM@Q^QVVz$AigD#Vu87Ad+pWFwsL{fl zW}La#xoD#XcEn+jvLX)w9p7^(Q$DBoMcWd>wH9zx8Z7)zfJDpQ&{sLvTD5 zhfncw6z++lY11WIny2%$9MHwiWTWxzWTA^M+S4NI3$xDAA$()h2~VGMBmH=Ha>i{) zbii-B|Gqb)yPX~i_iWUOFLYKXwKeJ8fYK?N*|F6mWZ7|9O^7VNi|EE!*fqWMA4a{| z@7N!OSX(RGeF&FO3UGC)vTECWlcIorp2o+MRGhfo!0XD-W~X%17t(TR*81s}+dW;F zM0_X95<75NEAI#)eS#YfViwY82d-{aegm3+BCW+OZ5=Jt(lr7acg7iN&@9bi6k^oI zsEKzAzXr{Z=Fb4TH~&Vtc7_(P=WJ=819owQ9p`8PbDl2Xc@fCFU_F*LwhX{cjZs%5x&1Pxbf z8Ezdx!}VH*&Ji@+s%2O`f`;3*4DZoxWV_1y`!zZFpe84AEmKS%j+j0gG41E3j_FPf UQ-eN6J{xq0KF50w)?NDaZ@Oun)c^nh literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.class b/bin/src/main/java/com/bezkoder/springjwt/payload/response/JwtResponse.class new file mode 100644 index 0000000000000000000000000000000000000000..25d821260715a0ec764800f28a55cc90ccd3cf81 GIT binary patch literal 4105 zcmeHKQEwYX5S}$je0EHerU}r{(oLYn26{)K1=^&MswzlDZYwour9Q6jw)Q6H+tcn| zO88m4Ab|w${3yiio)f!dE1gvf3DgJsZg*zB{dQ*d?z=z#`t^4JxC=XVs1dlQRU8eO z$f5&w#G+UZqaOe1P$pbOI#(j=AG|bC&W=;bl1Oo#%S`j=hnMEb=)Mkf1eRTN%Cdg+ zxOc!~Ltx&>L!J>>>5grC#v*PJm@~&YCr}d!frV~Yy2+r>TxD#ChIx*hQoJgea_xMC zHW=906a9>tLZQ=ow~Le8XYqH?aba6z!t4;(ZJ%{0SMO3Rx{LOK^R4w-0 zeN1>A)(9+(8SE-0RRHgkdh#^G%**tMClo7`iDO2c_ zv-ptpIo(9>@T8vMX+6VHJ;RfFZqh_@O*3iekePTu4WjWMb1dW}8um(PdnL3a!>ZUN zH!;kmGSo#DMx-=mnO(2P>B-)jjj}&HCTb*Q)HY2;C)-l9z^TN@w&5%mdoavX5eq|g zk#mKm&a_cQY^0*)scLtq(6q=B{z7Ct3F*TESH?oQu=JRU>6n2{Y?X zWTyYYtc6q^$$h8pT4b(H@JH;13hrpl$=b0Q`6qCru5@@u`^=(B1B(+;= z%>d1#+eMsxdMZX2(J&s_h$p2gbvr3_=_R|V*QwC}ZW8#p%0_1-BxZCZ2sHO(p<@2M zu)V%Kq57Q!tiyMxUF~9ZxMT0|6Iek0I&D6~fLZ(Bpd1`v1$KSLIv2J`q2 zc&(4F0W{pWIT|mHt}S>Mqs}?o614Ds8O~!|IkN&6&~g(|En4$8Sbe_o-Y@XMAI|?n z{9nKbz~3eOx6$YYm*FEfcLgZUoFF)xL)h>jta%YWhV==Anniyt!bLB_CsS~^>_xab z1&0kU!ZrAGVi)5)v^{ya>P7erKA%7s=fQ{2@gjUNMINqu5w1^>hZ|mma0(8$ya>@0 q9Bz9NzJwd6-TjrPH^27OYx15FKwrHZh?sA?5qS^psq7FP!+gpn{MRkZ7pH(eawZ$*#S!y@Bw@kU)Yv zKMFCMq-{!rltT|(Y>z#De)IIkzkYxF0RYe7eh2}917}5?ai!xipYm9kEFQ=&6O%|A zyWA>09Dnk0&S$CNNo=Ldjdn8bN$2=bzFWp2R0!z3Qr)+7I_4k-P6-U zU*bL?P<^Vj^3MtEwa*`SjtEpu%-mx}>-~{ri4-Zfn3QudLE3B|v!mlWqmw$LWu4J+o%<{?(lKp3%eWUK<`GSP z&at>vG}JIEHH=D<(Wcn6z7T>5uFDq&lAToJ4dcwua!Kp2vpiKodFF~-TC7t$Zwuj# zWeb_x9i|*BbRs`0Et81#3g=6f^K0phDLpk4$v8eTI*YI&g^hUrhe;GD>@*;R8XBmJ z;=C!cfwX;&?kFv31W%8+Rb{-~toV^~1YUJ7q%Y9pbSV9@TL`q;o%2So!3_fG23Ec> zg^`t8VMPy3VTF9DN>y5awf5Z8A>2LF-wP%L8a?G4_HrMc>fj*|*uuYsKmeDZimNSL zqxv}3F?xh?fHVCL^h2}p6}Eq36u>TyRm>@GUd6F7UsGtpwfSBP_Er$eyamGbH3)Pq b!p(nhSckB^1|fi3_-X*R;U3NvWOL^aj(vzK literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/repository/RoleRepository.class b/bin/src/main/java/com/bezkoder/springjwt/repository/RoleRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..eaeee1d9f9f19c361de5834d25d38bdc2e8e7de8 GIT binary patch literal 1307 zcmb_cOK%e~5FV#(Hd)dKDd82MCcIh>yLS>Q0V<+sX{DxA;^=Hl>U7s$*-jw*F(i=S z&W}Qjw@H(VqV&MQ$%7hI2Y{AmN`|~kQ9~vYW`&Y8)2fs3)I6hp`S6(2E{_wY5tOm` zg!MRWAUc>R4$c$@Q^gJ1RoqaiEKQk>kEul-{y9UPvpiUbz||pe@`CxSr+P%1DQ#(f zXJAD_VWzx+01m&Ur8m_rvSc~R!G z5%)9Ka&}P-XJMBJwlg2&LkX5EumYIoe|>BGxyfTt;&%nk3dFP;QH!WOkqtQU4p!ik$N1HX{AD z8t9n67B1Ynb5Glm&nSU#M(ydtYewhVHl~YQ@pIDp!9ZG(@?AL;MxgQ+Zd&uFW(ZWG zX$VwM+m*4BMi|SbeIvMLIzAqGaF@VRo|*?61eVW5^x!_ebr;Wr2e<|%seAAU{Vod( z^G+Cpr9H$sGerWpB5)xA6tE>rP(<59>*?6*e}~eCs{a)#KXc3){yGfcxte?23aY|7 p+ShWshAh|fuNz~}O}K@&yLB7?>v#Yj<5@x99k>S+8t@Pn{s5L!iVOe% literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/repository/UserRepository.class b/bin/src/main/java/com/bezkoder/springjwt/repository/UserRepository.class new file mode 100644 index 0000000000000000000000000000000000000000..2afdc2eb43a330872d8332b5510f187cecbff9c0 GIT binary patch literal 1558 zcmcgs-%k@k5S~Tk+FGE3_zS@m6#-4}-PR^zFk((gppf{uy{_$+yWPv~7ODT3i6;8) z-{Ie3oV{LYn>3aO(>^J!5 zQ`O|!H;ERq)%j$7%@bvWRl4UN8?Fy8Ob=!Wlv3A-$(Dc6=>EDq6oS}UD{Yh>ovvDDnC=!`chYDh%HtWc6BS~Vgbo9DEUueUjE@-Si= zK?w^_S&P#RM3)DO%NL5vL&Y1kskot1SsF7Nwy8xPex9JtQ69`g+2x_^?out;F8nzhHuRxoUczMzV0 zn8iRy{=OSGxUMto0Rl^b3R!f*v~YH|x$sfQ=5EjBO|lqK>y!9`LHa8M@<*a2neA!> zZ~hfr4IFKyhE64ZE{rv!fz~GaW{F3a`GLzGwpB!+aHP6A<5_0>vM=I|C*BIt<{tp6<9=y9CQ<-$?Bhv~R*K rBqVU#{gL%fdU7{ItinCC9m^X2*Kq+n#Z|({_u&CNgvam%<8S`~N&MVx literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.class b/bin/src/main/java/com/bezkoder/springjwt/security/WebSecurityConfig.class new file mode 100644 index 0000000000000000000000000000000000000000..2d93bd7c5c3646233617ba1c4a549a58d319bce8 GIT binary patch literal 5544 zcmeHL-E!MR6h51VDt1ECrZlv)g>7iS;m78u6sSwv#BoU(2Qnlr!{u6D$D2qi&1#i2 zeFdI^D;|Lvn1OpY-4n?N*#&)G2rt}ugSpjBvVPtmw8R2HZRXec|pDE42gll5f3br85+iNf@tb!QqxJr3f7w|zbgP3oLkxKxzMZ0xAUlJRR?wcpcci z!1Gz2j6MaN`zjnyhvml4Ht#s!lM>e-4=@ehBkG$EYt7 zn6I?b-47!nX@sfvi7I|T$X}CH*#>#z=x>W7>|DNY2F4Dfs3S2nxV-G^pTcXn~6kfB<0ro zV+C4ZeebW>FDZH?MX?h*l~ClRKp!Mi;&-k(=R5SW@&_~r)ZCEr^aSGh@wnpm0BpC0lDq0IngN*=8ZCK z(+V$({;UOhz%u723$Si`XUw%01HNE$HYc0bCc9jZBW@q_e^QQd&9}#?0tWMLs!W{7 z!;6q7Idgp2&el$^Ci2kzy6{^0-R1+q_ONPB&BmB%!I1gf_OTRJWMnF}&5~1f7v;KZ zGtRF76@^;?+GJ)_ZSUjaC>%iTc}vYP>ul-Nhq~ax$}%``iNKXkFr7z5PP*B=S_!cG z9;I=g>%Htl5LgXV$f75QALj67(~g88&p=}o~k)8T01!1n~MpJ>>lGqwXi61a9^w;WUstRoA}lY#?36S#cr zeL)Nk{EFxBVj>Y(-WJ9nUnFjh@>RZF-yLbV3c&(!6-@y;ifuGRoFKGANd*7N$)Bpeg literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/security/jwt/AuthTokenFilter.class b/bin/src/main/java/com/bezkoder/springjwt/security/jwt/AuthTokenFilter.class new file mode 100644 index 0000000000000000000000000000000000000000..8706dbfaf8711ed2cd470c17f94e890553cfb077 GIT binary patch literal 4111 zcmeHKZFAd15Z-f4WvhXhG%cltRt;|sFBb2#bzvqG+KCxKI!#iBPs~}~u`iKy;_mDu z{4r)=fbaY$hLvQyN-RbS12cTc2V1`L?sNO1eRl7UKY#uW06vGV1vLhnTKR6sMdTjv z33q)Nx_$idP!3SJI#wbY9vm50qd!){oVdwib8JR?@(`m(A~2{ds55A#+5wM-?oR&z zeZ!zZvin8^n!y9_{HJ_1)$TI5`D7d!5n?Zz2rc>nZbp$b+z1&F_+^g_l1D<}fMi$4 z8r7F*I32u;Y9f4OaNXNq*zJXJK=PLYIUJ%Qb3HHpmFztbkuYB{SZZ%PWl-OuXjt$f zgOz7qK2%Do23%p*_xq7TErSUT91347g48l6R+3B&^?k=~?v2nHpdWBD(uui$$cN~x zlXPbm?9M#comsFu6u@<7AW=Kyt`lmI4F6w>Ni{69>q4YBt@OGShHfYF@iD3=_`?{r$%?%|&@s~C zjyZ|ZZq6(5Uy>^>+Y<1sjw=a0;=YmUq(Ihg?o3cAF~EX9^Db{26DLFypqWPMJPJA{ z4l6q%3;ouJ3cLh+YRJQ5ALE1`OT>FSRV8;#(h5r8DhcIMS^}4ooHBXB*%g!`9^zxJ z^^sJAq*)<#4?iX4v~B(82;XA=^s%#kB*)4xOZM)x)o#hi;IY}30kz@+lkH~J+*PWF zO1V4tyIu)36G}&gB0p_t!PRAW99IEk)VlT>mQ6GNkVf&4^0WJfy@fCM~PAq4;b8Qdy66Jp5DtUzU$?RI(5OG zr&C*So8ZsZvITc&*vXYF1KXRCRJQ@Iv!zyrQDml35b6tBn>WaOC@Q_gIkGB=Y)H#GZq=4#IZ`Knb6;oCUL`V z+HHtthz-}y&{uj-AUf?uKFuFO8)}i;0u@*O=){8eh-h;BWPwYBy6A@mA27IbYCmH) z3qGP-RF)tMKB4oAW=RV^V{omw94xqZ>Qb4x%V7Cyp*2k+do*rpxC3-Yqs#0P)ZjU| zL@SF{$+JPv8Z^N^vv&h7!*Z&@sH40<|E|#LV?to`w10utcdM&E!P@Vs{!8?opaFfZ z)Aw>F1uw%5TGinuyh56?E++gH{eY=YlcvpBfM3B maJK+q2{uTl25-YV^aQw1pEZidyU>C6$<7bS=Ueb8-2Dsc+C-)R literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/security/jwt/JwtUtils.class b/bin/src/main/java/com/bezkoder/springjwt/security/jwt/JwtUtils.class new file mode 100644 index 0000000000000000000000000000000000000000..a4c89de0ca1f751180ab9d414696063a90207463 GIT binary patch literal 4627 zcmeHLZEqVz5T12j>^ssV4U_@_x&&x#3U-0=qNX54Z6bv_MUWQ>zOB!b^CowDr@cKl z=FjjmkU)a(NQi%gn7ykTTe-+ibrC}9mwWL(`|RxO%rkTT^PgXT2Y|2O%PLeD+)K3A z3WZdyBheQvFA7^7{OLIAqHZOzmdZbRVp<7$sg`EYvM=8}G5baaNfl-pEN9aKq5Rgj zog?%NgZUuxebfwU?RNIG&cLCGyXa}8@s;-JoLys=Ai(PPsWLLeZPk~F>;$->RAhva zkxCd;+Xo^@k#KW;`@mp{2sck+sWZq9Vc0e;eP1eRzGg5}ZyYd~eL(xD!it64-DPHO zY8~ksyuxbV?JJE*6!fvnY2&dBGBO_Phztmmd)#&QddR!z1ws=j7T&S&k*^WDIdoI= znVXtJH#Nz)HQtRd;j{@J3gh*-AtpSD$wi|~30f72S+oQ5~INrrKx4bNr`m*t+Y zPU9Wq!+o6vr*w3afRXn9PZ09jBy(kSX^00DIgvtT3Rd7I;)0t&jIOgC#)0&t;Yk{! zrhrq4(Wz%5&GXEuH@HlAs=9b66~)LQjnK151EM}fH~CJQ7&}5JE|d+boOlG}I(h0% zuqg*^32Vim0P8wg-W80D?krE@382!5Hd4wY(h4t6*0V7`YTAB+`XL%Ya%KHL!N!ZB zNe7bxLf3gH3>FNG+Eot3ic^TD7j^kD4k&&OHKl?T8XIz)49tX@)Zh?xV%N80p-d7I z-5m1>2d=X#eI-n)aU<{}()nIdKIP{3g_eTU(RFC%giR9S90#Fi3rz9gRMAu(=-g8* z&AC~Lo8YQTw_-;Gq$eSEX{F5*4`W+dCm1!Agk(jyeA<0QGHFX(`PAD%fW8Pew4a6~ zBxQQTg{$!D0xZIH2G{Cm`yAVpEVW6uAE#jl^`6Zn+Ym*b2o9cR*3%znO;1u+bHDxk z4H~se%RVZk9tr8#_o8D|4Bo4^$0c;Van{fp++ghQDf*+S5^;RJ2~l@35xyAu+%zjk zkEdWMO;w&lvZ*bmGC|#Rz0oFZUa!Hs41S*CkpD}mXK>v|V~_c<2yu%F+-WG^EK0GW zV7|rRuPOF9RWMHlIycZtI)BP+`Vf-cvCJ-1oF8j&n^l&|+Wlp3%z06$PQMr~uTU{? zccWB$xFu}`xU&%SEbt8j3JbX5$h_wF?bW+qU(^MLciqt$ GXa54dNz(TK literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.class b/bin/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..6cb494b975bb34ce3fa3e1afe07b8f06bd10b692 GIT binary patch literal 5908 zcmd5=X>$`t5bZJ8Ixv^H638(?LgbK0NytHvIUHkSfxrYGRpdh|>(w9)UhOC|y9VcP z#k4ojuu7qT>SQD24yUO16PS5K%J>5Os^Zehx{wAWUw34F{Msr5{m9{6t z%42WctN5y2SrxynsfN%M)6p_)K7JBajPPSEqYb?1b?FOJS;pH<5qUB&wRR`S(SAlp z5{SSHo0Wyt$HI^B31ZR@jM!~P2WM1hA}@?qydV~%;A4LnqY>F)G*+*x zuvul4k1;*;+JezUy$`+^SzZ_)6<{7fuHzZ=L}|=D^B@i**%q~MT^hL>i0Lp?krzR` zVKiR9ZB$rmhDr;}Kj6htOJQMBB!e?52tXUM7%VKxX6Qw+hW4}d{?OFL`YjFWqA}f_ zy-~de`LQV(%IF%SJEfHW%Z#1A^fgr{R~Y@WTWHz5t&06K*zO#iVRX1} z@N7BM!l+dNy!f7x5Du`-+Y8=Uc`=0d- zzAAWcb$dln>EC1?lxFa-z3dvB%exx){6K83XOT*)^As)$4G|K#LY$6*G$+TdD%Wz$- z3GTszTbmKyu)&?S?seJmjk?xbU8xPXAx>47aFLgj+F&UDPdDvuo6;r&w^&$M7h21P z$QT?{`nopX8P~x}97LS9-$}^PZcbQELVH!ABd@n3mK3l{-YM4o!OmAcPVv+2Q5jlfy-dbecXKr<24PohZFrf7W-<^&D74zt7ECbZ+_e*tand;#J8{r} zZBGEc10&VoJ9(JGh5?rN6{D8J5{CzkL&*xoATXP@pU1(W-#Dcy8GOEF6gcp4O5rX- z=x4#{ezz6Q)Ax*ichK*+lqx*QX8gldiJ~p5$M@yS7r&2G)ZO~n53~rK^ za5ft{OYl0}LXF|b9K~NoIs7+5dHfdXK=M9L2b1Ta?(;C7fKFyHI+~14&@p^Fp1hx+ zalD_TQ@}{SyhHC|&eKPD7U*NT zfG-x|Qy?T`3Bo5C2p1BB5y&!{OypAr7hmxG3}ZbueXP$jur6h=VN{_nx@_!v`UqcU zAY9HwxCBe2>)DL(O$NeLCc<|>7#Xsn%Nb}lGSRN=5N$RStx8ivxn0fRb~_X8`VP?+ zGSP1A5N#QqzpqW?L&3bbhGdDBr_Hzc>KAOXv5xPb5coHq+_Xr}pMtA5g LEzpnf+{OO@&6n4g literal 0 HcmV?d00001 diff --git a/bin/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.class b/bin/src/main/java/com/bezkoder/springjwt/security/services/UserDetailsServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..1bffeb0a38d69bae78e8e50776467d9adb6f8231 GIT binary patch literal 2344 zcmdT`TT>G;6h48<(ozAdsEBC5Tk+Dq_$2BKDvZo5FvD%e$8;NLU^m%GvW5D`oY5J5 z_eVLNbi1?+$nxL|57}h1-}!RRmy?tI{pb5n0C)$lJQyOdW^_=Gn2_}Y)@JoUMfC>% zdZ?OQ*G;U2+&?(7b;E;13){hgZi|4M`VNjhamz$#w$i!PC=NX+5SZ*Tg-q_(HyQ^# zumr{vgm3a#8DW*~AjWqD{h37qGnYZawt)h(DPRvV1mzg3E zmYO8y8dE?TtCIjTk){b+U7*6yL^k=Jkho!c_yxx-3GE=dM%NN!-4{erCfyFF!~>M2 z;@P8- zxXZL~@4d-_Z3(PZ8~%SSs#xzTp<+#^*N0A~8iBddsg6Q9n)vE0IEIYq$~-0sfZfxBoqjpG7-xz}BxgxvRWW)@qfyq!|?ns_&eqc literal 0 HcmV?d00001 diff --git a/bin/src/main/resources/application.properties b/bin/src/main/resources/application.properties new file mode 100644 index 0000000..481d5ed --- /dev/null +++ b/bin/src/main/resources/application.properties @@ -0,0 +1,10 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/testdb_spring?useSSL=false +spring.datasource.username=root +spring.datasource.password=123456 + +spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect +spring.jpa.hibernate.ddl-auto=update + +# App Properties +bezkoder.app.jwtSecret= ======================BezKoder=Spring=========================== +bezkoder.app.jwtExpirationMs=86400000 \ No newline at end of file diff --git a/bin/src/test/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplicationTests.class b/bin/src/test/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplicationTests.class new file mode 100644 index 0000000000000000000000000000000000000000..3289515bd0224d0496a9e8999549a017864bcd45 GIT binary patch literal 1120 zcmb_b%We}f6uk~<9z!5)puD;BU@;y)j?XGJ~L;@k2HdbQ96xnfCBp`zB4auvBSBGv@e|I=n27bCh=RGTIP&8$z!s{0r40 zvdnUA9Mxt*Ia8i^Ea;i$e}YtYdgGR`P^T%Q?j#pMdpGkoOGj;y3xl30>rBC&Hgw@| ze~U^>3zdiisqjq)c!G0Qq)1(%L;9w`U<(vw%A2qtz5qh`S1Jmi1vfgd0yhb)_v0#w zL+9&d;FH{qQOesQ8w)dHm^T8wSaX){Gb8=_bhGZJ(h`W{|5t?r0v&vi6UQ#rEJ5~- z_l0sY6T50It;FCvK51oD;b|lGFCMhuE`gVq*IrqASK31$80x}s@ml(KKdO>_N$-?p zhusrb=u#Fu1ne8^SAZJMR-l1n6IYLMm*7A62Ca|1;0ttql$b7#9s~HT;@DZBU=4cZ i-Yq<>!R=GjI{yD;yR(F?y@ag>_warV?w|8L0Qe2oMog{% literal 0 HcmV?d00001 diff --git a/src/main/java/com/bezkoder/springjwt/models/User.java b/src/main/java/com/bezkoder/springjwt/models/User.java index 2ad0c5d..8b34d48 100644 --- a/src/main/java/com/bezkoder/springjwt/models/User.java +++ b/src/main/java/com/bezkoder/springjwt/models/User.java @@ -87,3 +87,4 @@ public void setRoles(Set roles) { this.roles = roles; } } +// From 676020cc209847b6ef03282721c9ef9446474766 Mon Sep 17 00:00:00 2001 From: Selvaraj1818 Date: Mon, 8 Apr 2024 21:55:25 -0700 Subject: [PATCH 2/2] Commit to Branch2 --- src/main/resources/app.txt | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/main/resources/app.txt diff --git a/src/main/resources/app.txt b/src/main/resources/app.txt new file mode 100644 index 0000000..e69de29