Skip to content

Commit c17d3b8

Browse files
committed
feat: lombok adaptation & refactoring
1 parent e037bf6 commit c17d3b8

19 files changed

+549
-690
lines changed

pom.xml

Lines changed: 77 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,90 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<project xmlns="http://maven.apache.org/POM/4.0.0"
3-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5-
<modelVersion>4.0.0</modelVersion>
6-
<parent>
7-
<groupId>org.springframework.boot</groupId>
8-
<artifactId>spring-boot-starter-parent</artifactId>
9-
<version>2.6.1</version>
10-
<relativePath /> <!-- lookup parent from repository -->
11-
</parent>
12-
<groupId>com.bezkoder</groupId>
13-
<artifactId>spring-boot-security-jwt</artifactId>
14-
<version>0.0.1-SNAPSHOT</version>
15-
<name>spring-boot-security-jwt</name>
16-
<description>Demo project for Spring Boot Security - JWT</description>
3+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
5+
<modelVersion>4.0.0</modelVersion>
6+
<parent>
7+
<groupId>org.springframework.boot</groupId>
8+
<artifactId>spring-boot-starter-parent</artifactId>
9+
<version>2.6.1</version>
10+
<relativePath/> <!-- lookup parent from repository -->
11+
</parent>
12+
<groupId>com.bezkoder</groupId>
13+
<artifactId>spring-boot-security-jwt</artifactId>
14+
<version>0.0.1-SNAPSHOT</version>
15+
<name>spring-boot-security-jwt</name>
16+
<description>Demo project for Spring Boot Security - JWT</description>
1717

18-
<properties>
19-
<java.version>1.8</java.version>
20-
</properties>
18+
<properties>
19+
<java.version>1.8</java.version>
20+
</properties>
2121

22-
<dependencies>
23-
<dependency>
24-
<groupId>org.springframework.boot</groupId>
25-
<artifactId>spring-boot-starter-data-jpa</artifactId>
26-
</dependency>
22+
<dependencies>
23+
<dependency>
24+
<groupId>org.springframework.boot</groupId>
25+
<artifactId>spring-boot-starter-data-jpa</artifactId>
26+
</dependency>
2727

28-
<dependency>
29-
<groupId>org.springframework.boot</groupId>
30-
<artifactId>spring-boot-starter-security</artifactId>
31-
</dependency>
32-
33-
<dependency>
34-
<groupId>org.springframework.boot</groupId>
35-
<artifactId>spring-boot-starter-validation</artifactId>
36-
</dependency>
28+
<dependency>
29+
<groupId>org.springframework.boot</groupId>
30+
<artifactId>spring-boot-starter-security</artifactId>
31+
</dependency>
3732

38-
<dependency>
39-
<groupId>org.springframework.boot</groupId>
40-
<artifactId>spring-boot-starter-web</artifactId>
41-
</dependency>
33+
<dependency>
34+
<groupId>org.springframework.boot</groupId>
35+
<artifactId>spring-boot-starter-validation</artifactId>
36+
</dependency>
4237

43-
<dependency>
44-
<groupId>mysql</groupId>
45-
<artifactId>mysql-connector-java</artifactId>
46-
<scope>runtime</scope>
47-
</dependency>
38+
<dependency>
39+
<groupId>org.springframework.boot</groupId>
40+
<artifactId>spring-boot-starter-web</artifactId>
41+
</dependency>
4842

49-
<dependency>
50-
<groupId>io.jsonwebtoken</groupId>
51-
<artifactId>jjwt</artifactId>
52-
<version>0.9.1</version>
53-
</dependency>
43+
<dependency>
44+
<groupId>mysql</groupId>
45+
<artifactId>mysql-connector-java</artifactId>
46+
<scope>runtime</scope>
47+
</dependency>
5448

55-
<dependency>
56-
<groupId>org.springframework.boot</groupId>
57-
<artifactId>spring-boot-starter-test</artifactId>
58-
<scope>test</scope>
59-
</dependency>
49+
<dependency>
50+
<groupId>io.jsonwebtoken</groupId>
51+
<artifactId>jjwt</artifactId>
52+
<version>0.9.1</version>
53+
</dependency>
54+
<dependency>
55+
<groupId>org.projectlombok</groupId>
56+
<artifactId>lombok</artifactId>
57+
<version>1.18.24</version>
58+
</dependency>
6059

61-
<dependency>
62-
<groupId>org.springframework.security</groupId>
63-
<artifactId>spring-security-test</artifactId>
64-
<scope>test</scope>
65-
</dependency>
66-
</dependencies>
60+
<dependency>
61+
<groupId>org.springframework.boot</groupId>
62+
<artifactId>spring-boot-starter-test</artifactId>
63+
<scope>test</scope>
64+
</dependency>
6765

68-
<build>
69-
<plugins>
70-
<plugin>
71-
<groupId>org.springframework.boot</groupId>
72-
<artifactId>spring-boot-maven-plugin</artifactId>
73-
</plugin>
74-
</plugins>
75-
</build>
66+
<dependency>
67+
<groupId>org.springframework.security</groupId>
68+
<artifactId>spring-security-test</artifactId>
69+
<scope>test</scope>
70+
</dependency>
71+
</dependencies>
72+
73+
<build>
74+
<plugins>
75+
<plugin>
76+
<groupId>org.springframework.boot</groupId>
77+
<artifactId>spring-boot-maven-plugin</artifactId>
78+
<configuration>
79+
<excludes>
80+
<exclude>
81+
<groupId>org.projectlombok</groupId>
82+
<artifactId>lombok</artifactId>
83+
</exclude>
84+
</excludes>
85+
</configuration>
86+
</plugin>
87+
</plugins>
88+
</build>
7689

7790
</project>

src/main/java/com/bezkoder/springjwt/SpringBootSecurityJwtApplication.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
@SpringBootApplication
77
public class SpringBootSecurityJwtApplication {
88

9-
public static void main(String[] args) {
10-
SpringApplication.run(SpringBootSecurityJwtApplication.class, args);
11-
}
9+
public static void main(String[] args) {
10+
SpringApplication.run(SpringBootSecurityJwtApplication.class, args);
11+
}
1212

13-
}
13+
}
Lines changed: 98 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
package com.bezkoder.springjwt.controllers;
22

3-
import java.util.HashSet;
4-
import java.util.List;
5-
import java.util.Set;
6-
import java.util.stream.Collectors;
7-
8-
import javax.validation.Valid;
9-
10-
import org.springframework.beans.factory.annotation.Autowired;
3+
import com.bezkoder.springjwt.models.ERole;
4+
import com.bezkoder.springjwt.models.Role;
5+
import com.bezkoder.springjwt.models.User;
6+
import com.bezkoder.springjwt.payload.request.LoginRequest;
7+
import com.bezkoder.springjwt.payload.request.SignupRequest;
8+
import com.bezkoder.springjwt.payload.response.JwtResponse;
9+
import com.bezkoder.springjwt.payload.response.MessageResponse;
10+
import com.bezkoder.springjwt.repository.RoleRepository;
11+
import com.bezkoder.springjwt.repository.UserRepository;
12+
import com.bezkoder.springjwt.security.jwt.JwtUtils;
13+
import com.bezkoder.springjwt.security.services.UserDetailsImpl;
14+
import lombok.RequiredArgsConstructor;
1115
import org.springframework.http.ResponseEntity;
1216
import org.springframework.security.authentication.AuthenticationManager;
1317
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1418
import org.springframework.security.core.Authentication;
19+
import org.springframework.security.core.GrantedAuthority;
1520
import org.springframework.security.core.context.SecurityContextHolder;
1621
import org.springframework.security.crypto.password.PasswordEncoder;
1722
import org.springframework.web.bind.annotation.CrossOrigin;
@@ -20,110 +25,100 @@
2025
import org.springframework.web.bind.annotation.RequestMapping;
2126
import org.springframework.web.bind.annotation.RestController;
2227

23-
import com.bezkoder.springjwt.models.ERole;
24-
import com.bezkoder.springjwt.models.Role;
25-
import com.bezkoder.springjwt.models.User;
26-
import com.bezkoder.springjwt.payload.request.LoginRequest;
27-
import com.bezkoder.springjwt.payload.request.SignupRequest;
28-
import com.bezkoder.springjwt.payload.response.JwtResponse;
29-
import com.bezkoder.springjwt.payload.response.MessageResponse;
30-
import com.bezkoder.springjwt.repository.RoleRepository;
31-
import com.bezkoder.springjwt.repository.UserRepository;
32-
import com.bezkoder.springjwt.security.jwt.JwtUtils;
33-
import com.bezkoder.springjwt.security.services.UserDetailsImpl;
28+
import javax.validation.Valid;
29+
import java.util.HashSet;
30+
import java.util.List;
31+
import java.util.Set;
32+
import java.util.stream.Collectors;
3433

3534
@CrossOrigin(origins = "*", maxAge = 3600)
3635
@RestController
36+
@RequiredArgsConstructor
3737
@RequestMapping("/api/auth")
3838
public class AuthController {
39-
@Autowired
40-
AuthenticationManager authenticationManager;
41-
42-
@Autowired
43-
UserRepository userRepository;
44-
45-
@Autowired
46-
RoleRepository roleRepository;
47-
48-
@Autowired
49-
PasswordEncoder encoder;
50-
51-
@Autowired
52-
JwtUtils jwtUtils;
53-
54-
@PostMapping("/signin")
55-
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest) {
56-
57-
Authentication authentication = authenticationManager.authenticate(
58-
new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()));
59-
60-
SecurityContextHolder.getContext().setAuthentication(authentication);
61-
String jwt = jwtUtils.generateJwtToken(authentication);
62-
63-
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
64-
List<String> roles = userDetails.getAuthorities().stream()
65-
.map(item -> item.getAuthority())
66-
.collect(Collectors.toList());
67-
68-
return ResponseEntity.ok(new JwtResponse(jwt,
69-
userDetails.getId(),
70-
userDetails.getUsername(),
71-
userDetails.getEmail(),
72-
roles));
73-
}
74-
75-
@PostMapping("/signup")
76-
public ResponseEntity<?> registerUser(@Valid @RequestBody SignupRequest signUpRequest) {
77-
if (userRepository.existsByUsername(signUpRequest.getUsername())) {
78-
return ResponseEntity
79-
.badRequest()
80-
.body(new MessageResponse("Error: Username is already taken!"));
81-
}
8239

83-
if (userRepository.existsByEmail(signUpRequest.getEmail())) {
84-
return ResponseEntity
85-
.badRequest()
86-
.body(new MessageResponse("Error: Email is already in use!"));
40+
private final AuthenticationManager authenticationManager;
41+
42+
private final UserRepository userRepository;
43+
44+
private final RoleRepository roleRepository;
45+
46+
private final PasswordEncoder encoder;
47+
48+
private final JwtUtils jwtUtils;
49+
50+
@PostMapping("/signin")
51+
public ResponseEntity<?> authenticateUser(@Valid @RequestBody LoginRequest loginRequest) {
52+
53+
Authentication authentication = authenticationManager.authenticate(
54+
new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword()));
55+
56+
SecurityContextHolder.getContext().setAuthentication(authentication);
57+
String jwt = jwtUtils.generateJwtToken(authentication);
58+
59+
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
60+
List<String> roles = userDetails.getAuthorities().stream()
61+
.map(GrantedAuthority::getAuthority)
62+
.collect(Collectors.toList());
63+
64+
return ResponseEntity.ok(new JwtResponse(jwt,
65+
userDetails.getId(),
66+
userDetails.getUsername(),
67+
userDetails.getEmail(),
68+
roles));
8769
}
8870

89-
// Create new user's account
90-
User user = new User(signUpRequest.getUsername(),
91-
signUpRequest.getEmail(),
92-
encoder.encode(signUpRequest.getPassword()));
93-
94-
Set<String> strRoles = signUpRequest.getRole();
95-
Set<Role> roles = new HashSet<>();
96-
97-
if (strRoles == null) {
98-
Role userRole = roleRepository.findByName(ERole.ROLE_USER)
99-
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
100-
roles.add(userRole);
101-
} else {
102-
strRoles.forEach(role -> {
103-
switch (role) {
104-
case "admin":
105-
Role adminRole = roleRepository.findByName(ERole.ROLE_ADMIN)
106-
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
107-
roles.add(adminRole);
108-
109-
break;
110-
case "mod":
111-
Role modRole = roleRepository.findByName(ERole.ROLE_MODERATOR)
112-
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
113-
roles.add(modRole);
114-
115-
break;
116-
default:
117-
Role userRole = roleRepository.findByName(ERole.ROLE_USER)
118-
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
119-
roles.add(userRole);
71+
@PostMapping("/signup")
72+
public ResponseEntity<?> registerUser(@Valid @RequestBody SignupRequest signUpRequest) {
73+
if (userRepository.existsByUsername(signUpRequest.getUsername())) {
74+
return ResponseEntity
75+
.badRequest()
76+
.body(new MessageResponse("Error: Username is already taken!"));
77+
}
78+
79+
if (userRepository.existsByEmail(signUpRequest.getEmail())) {
80+
return ResponseEntity
81+
.badRequest()
82+
.body(new MessageResponse("Error: Email is already in use!"));
12083
}
121-
});
122-
}
12384

124-
user.setRoles(roles);
125-
userRepository.save(user);
85+
// Create new user's account
86+
User user = new User(signUpRequest.getUsername(),
87+
signUpRequest.getEmail(),
88+
encoder.encode(signUpRequest.getPassword()));
89+
90+
Set<String> strRoles = signUpRequest.getRoles();
91+
Set<Role> roles = new HashSet<>();
92+
93+
if (strRoles == null) {
94+
Role userRole = roleRepository.findByName(ERole.ROLE_USER)
95+
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
96+
roles.add(userRole);
97+
} else {
98+
strRoles.forEach(role -> {
99+
switch (role) {
100+
case "admin":
101+
Role adminRole = roleRepository.findByName(ERole.ROLE_ADMIN)
102+
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
103+
roles.add(adminRole);
104+
105+
break;
106+
case "mod":
107+
Role modRole = roleRepository.findByName(ERole.ROLE_MODERATOR)
108+
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
109+
roles.add(modRole);
110+
111+
break;
112+
default:
113+
Role userRole = roleRepository.findByName(ERole.ROLE_USER)
114+
.orElseThrow(() -> new RuntimeException("Error: Role is not found."));
115+
roles.add(userRole);
116+
}
117+
});
118+
}
126119

127-
return ResponseEntity.ok(new MessageResponse("User registered successfully!"));
128-
}
120+
user.setRoles(roles);
121+
userRepository.save(user);
122+
return ResponseEntity.ok(new MessageResponse("User registered successfully!"));
123+
}
129124
}

0 commit comments

Comments
 (0)