Created
September 14, 2023 06:16
-
-
Save mayankchoubey/5ac6862a8ae793bd78ab891f661fa076 to your computer and use it in GitHub Desktop.
SpringBoot Webflux - JWT verify & MySQL read
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| server.port=3000 | |
| spring.r2dbc.url=r2dbc:mysql://localhost:3306/testdb?allowPublicKeyRetrieval=true&ssl=false | |
| spring.r2dbc.username=dbuser | |
| spring.r2dbc.password=dbpwd | |
| spring.r2dbc.pool.initial-size=10 | |
| spring.r2dbc.pool.max-size=10 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package webfluxdemo; | |
| import org.springframework.data.annotation.Id; | |
| import org.springframework.data.relational.core.mapping.Table; | |
| @Table(name = "users") | |
| public class User { | |
| @Id | |
| private String email; | |
| private String first; | |
| private String last; | |
| private String city; | |
| private String county; | |
| private int age; | |
| public User() { | |
| } | |
| public User(String email, String first, String last, String city, String county, int age) { | |
| this.email = email; | |
| this.first = first; | |
| this.last = last; | |
| this.city = city; | |
| this.county = county; | |
| this.age = age; | |
| } | |
| public String getId() { | |
| return email; | |
| } | |
| public void setId(String email) { | |
| this.email = email; | |
| } | |
| public String getFirst() { | |
| return first; | |
| } | |
| public void setFirst(String name) { | |
| this.first = name; | |
| } | |
| public String getLast() { | |
| return last; | |
| } | |
| public void setLast(String name) { | |
| this.last = name; | |
| } | |
| public String getEmail() { | |
| return email; | |
| } | |
| public void setEmail(String email) { | |
| this.email = email; | |
| } | |
| public String getCity() { | |
| return city; | |
| } | |
| public void setCity(String city) { | |
| this.city = city; | |
| } | |
| public String getCounty() { | |
| return county; | |
| } | |
| public void setCounty(String county) { | |
| this.county = county; | |
| } | |
| public int getAge() { | |
| return age; | |
| } | |
| public void setAge(int age) { | |
| this.age = age; | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package webfluxdemo; | |
| import org.springframework.boot.SpringApplication; | |
| import org.springframework.boot.autoconfigure.SpringBootApplication; | |
| import org.springframework.context.annotation.Bean; | |
| import org.springframework.core.io.ClassPathResource; | |
| import org.springframework.r2dbc.connection.init.ConnectionFactoryInitializer; | |
| import org.springframework.r2dbc.connection.init.ResourceDatabasePopulator; | |
| import org.springframework.web.reactive.config.EnableWebFlux; | |
| import io.r2dbc.spi.ConnectionFactory; | |
| @EnableWebFlux | |
| @SpringBootApplication | |
| public class UserApplication { | |
| public static void main(String[] args) { | |
| SpringApplication.run(UserApplication.class, args); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package webfluxdemo; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.http.HttpStatus; | |
| import org.springframework.web.bind.annotation.GetMapping; | |
| import org.springframework.web.bind.annotation.PathVariable; | |
| import org.springframework.web.bind.annotation.RequestBody; | |
| import org.springframework.web.bind.annotation.RequestMapping; | |
| import org.springframework.web.bind.annotation.RequestParam; | |
| import org.springframework.web.bind.annotation.ResponseStatus; | |
| import org.springframework.web.bind.annotation.RestController; | |
| import org.springframework.web.bind.annotation.RequestHeader; | |
| import org.springframework.http.HttpHeaders; | |
| import webfluxdemo.User; | |
| import webfluxdemo.UserService; | |
| import io.jsonwebtoken.Jwts; | |
| import io.jsonwebtoken.Jws; | |
| import io.jsonwebtoken.Claims; | |
| import io.jsonwebtoken.SignatureAlgorithm; | |
| import io.jsonwebtoken.security.Keys; | |
| import java.security.Key; | |
| import reactor.core.publisher.Flux; | |
| import reactor.core.publisher.Mono; | |
| @RestController | |
| @RequestMapping("/") | |
| public class UserController { | |
| @Autowired | |
| UserService userService; | |
| private SignatureAlgorithm sa = SignatureAlgorithm.HS256; | |
| private String jwtSecret = System.getenv("JWT_SECRET"); | |
| @GetMapping("/") | |
| @ResponseStatus(HttpStatus.OK) | |
| public Mono<User> getUserById(@RequestHeader(HttpHeaders.AUTHORIZATION) String authHdr) { | |
| String jwtString = authHdr.replace("Bearer",""); | |
| Claims claims = Jwts.parser() | |
| .setSigningKey(jwtSecret.getBytes()) | |
| .parseClaimsJws(jwtString).getBody(); | |
| return userService.findById((String)claims.get("email")); | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package webfluxdemo; | |
| import org.springframework.data.r2dbc.repository.R2dbcRepository; | |
| import org.springframework.stereotype.Repository; | |
| import webfluxdemo.User; | |
| public interface UserRepository extends R2dbcRepository<User, String> { | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package webfluxdemo; | |
| import java.util.Optional; | |
| import org.springframework.beans.factory.annotation.Autowired; | |
| import org.springframework.stereotype.Service; | |
| import webfluxdemo.User; | |
| import webfluxdemo.UserRepository; | |
| import reactor.core.publisher.Flux; | |
| import reactor.core.publisher.Mono; | |
| @Service | |
| public class UserService { | |
| @Autowired | |
| UserRepository userRepository; | |
| public Mono<User> findById(String id) { | |
| return userRepository.findById(id); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment