Skip to content

Commit a495f80

Browse files
committed
Logout feature added
1 parent 8b7d5f1 commit a495f80

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

spring-security/src/main/java/com/techsoft/springsecurity/controller/UserController.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import com.techsoft.springsecurity.entity.AuthRequest;
44
import com.techsoft.springsecurity.entity.UserInfo;
5+
import com.techsoft.springsecurity.logout.BlackList;
56
import com.techsoft.springsecurity.service.JwtService;
67
import com.techsoft.springsecurity.service.UserInfoService;
8+
import jakarta.servlet.http.HttpServletRequest;
79
import org.springframework.beans.factory.annotation.Autowired;
810
import org.springframework.security.access.prepost.PreAuthorize;
911
import org.springframework.security.authentication.AuthenticationManager;
@@ -24,6 +26,9 @@ public class UserController {
2426
@Autowired
2527
private JwtService jwtService;
2628

29+
@Autowired
30+
private BlackList blackList;
31+
2732
@GetMapping("/welcome")
2833
public String welcome(){
2934
return "Welcome to Spring Security tutorials !!";
@@ -32,7 +37,6 @@ public String welcome(){
3237
@PostMapping("/addUser")
3338
public String addUser(@RequestBody UserInfo userInfo){
3439
return userInfoService.addUser(userInfo);
35-
3640
}
3741
@PostMapping("/login")
3842
public String addUser(@RequestBody AuthRequest authRequest){
@@ -43,8 +47,20 @@ public String addUser(@RequestBody AuthRequest authRequest){
4347
throw new UsernameNotFoundException("Invalid user request");
4448
}
4549
}
50+
@PostMapping("/logout")
51+
@PreAuthorize("hasAuthority('USER_ROLES') or hasAuthority('ADMIN_ROLES')")
52+
public String logoutUser(HttpServletRequest request){
53+
String authHeader = request.getHeader("Authorization");
54+
String token= null;
55+
if(authHeader !=null && authHeader.startsWith("Bearer")){
56+
token = authHeader.substring(7);
57+
}
58+
blackList.blacKListToken(token);
59+
return "You have successfully logged out !!";
60+
}
61+
4662
@GetMapping("/getUsers")
47-
@PreAuthorize("hasAuthority('ADMIN_ROLES')")
63+
@PreAuthorize("hasAuthority('ADMIN_ROLES') or hasAuthority('USER_ROLES')")
4864
public List<UserInfo> getAllUsers(){
4965
return userInfoService.getAllUser();
5066
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.techsoft.springsecurity.logout;
2+
3+
import org.springframework.stereotype.Service;
4+
5+
import java.util.HashSet;
6+
import java.util.Set;
7+
@Service
8+
public class BlackList {
9+
private Set<String> blackListTokenSet = new HashSet<>();
10+
11+
public void blacKListToken(String token){
12+
blackListTokenSet.add(token);
13+
}
14+
public boolean isBlackListed(String token){
15+
return blackListTokenSet.contains(token);
16+
}
17+
}

spring-security/src/main/java/com/techsoft/springsecurity/service/JwtService.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.techsoft.springsecurity.service;
22

3+
import com.techsoft.springsecurity.logout.BlackList;
34
import io.jsonwebtoken.Claims;
45
import io.jsonwebtoken.Jwts;
56
import io.jsonwebtoken.SignatureAlgorithm;
67
import io.jsonwebtoken.io.Decoders;
78
import io.jsonwebtoken.security.Keys;
9+
import org.springframework.beans.factory.annotation.Autowired;
810
import org.springframework.security.core.userdetails.UserDetails;
911
import org.springframework.stereotype.Component;
1012

@@ -14,6 +16,8 @@
1416

1517
@Component
1618
public class JwtService {
19+
@Autowired
20+
private BlackList blackList;
1721
private static final String SECERET = "!@#$FDGSDFGSGSGSGSHSHSHSSHGFFDSGSFGSSGHSDFSDFSFSFSFSDFSFSFSF";
1822

1923
public String generateToken(String userName){
@@ -54,6 +58,6 @@ private Boolean isTokenExpired(String token){
5458
}
5559
public Boolean validateToken(String token, UserDetails userDetails){
5660
final String userName= extractUserName(token);
57-
return (userName.equals(userDetails.getUsername()) && !isTokenExpired(token));
61+
return (userName.equals(userDetails.getUsername()) && !isTokenExpired(token) && !blackList.isBlackListed(token));
5862
}
5963
}

0 commit comments

Comments
 (0)