WalzoneInterview Prep
📞 Interviewing soon? Practice with a realistic AI mock phone interview — it calls you, then scores you. First 15 min FREE →

Spring Boot & Hibernate · Advanced · question 50 of 100

Can you describe how to implement a stateless RESTful API using JWT for authentication and authorization in a Spring Boot application?

📕 Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers — PDF + EPUB for $5

JWT is a standard for token-based authentication and authorization in web applications. It allows for stateless authentication, meaning that the server does not need to store any session information or user data. Instead, a JWT is issued to the client upon successful authentication, and subsequent requests are authenticated using this token.

Here’s a general overview of the steps involved in implementing JWT authentication in a Spring Boot application:

Add the necessary dependencies: You’ll need to include the following dependencies in your pom.xml or build.gradle file:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.2</version>
</dependency>

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-impl</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-jackson</artifactId>
    <version>0.11.2</version>
    <scope>runtime</scope>
</dependency>

Create a user model and a user repository: These will be used to store user information and authenticate users.

Implement a custom user details service: This service should implement the Spring Security UserDetailsService interface and retrieve user information from the user repository.

Create a security configuration class: This class should extend the WebSecurityConfigurerAdapter class and configure security settings for the application, such as authentication and authorization rules.

Create a JWT token provider: This class should provide methods to create and validate JWT tokens.

Create a REST controller: This controller should provide endpoints for user authentication and token generation.

Secure the application endpoints: Use the @PreAuthorize annotation to secure individual endpoints or methods based on user roles or permissions.

Here’s an example of how you could implement a basic JWT authentication flow in a Spring Boot application:

    @RestController
    @RequestMapping("/api/auth")
    public class AuthController {
        
        @Autowired
        private AuthenticationManager authenticationManager;
        
        @Autowired
        private JwtTokenProvider jwtTokenProvider;
        
        @PostMapping("/login")
        public ResponseEntity<?> authenticateUser(@RequestBody LoginRequest loginRequest) {
            
            Authentication authentication = authenticationManager.authenticate(
            new UsernamePasswordAuthenticationToken(
            loginRequest.getUsername(),
            loginRequest.getPassword()
            )
            );
            
            SecurityContextHolder.getContext().setAuthentication(authentication);
            
            String jwt = jwtTokenProvider.generateToken(authentication);
            return ResponseEntity.ok(new JwtAuthenticationResponse(jwt));
        }
    }

In this example, the AuthController provides a POST endpoint for user authentication. The AuthenticationManager is used to authenticate the user, and if successful, a JWT is generated using the JwtTokenProvider. The JWT is then returned in the response body.

To secure other endpoints, you could use the @PreAuthorize annotation, like this:

    @RestController
    @RequestMapping("/api/users")
    public class UserController {
        
        @Autowired
        private UserRepository userRepository;
        
        @GetMapping("/")
        @PreAuthorize("hasRole('ADMIN')")
        public List<User> getAllUsers() {
            return userRepository.findAll();
        }
    }

In this example, the getAllUsers method is secured with the @PreAuthorize annotation, which requires users to have the ADMIN role in order to access this endpoint.

Overall, implementing a stateless RESTful API with JWT authentication in a Spring Boot

Reading is step one. Saying it out loud is the interview. Our AI interviewer calls your phone and runs a realistic Spring Boot & Hibernate interview — then scores it.
📞 Practice Spring Boot & Hibernate — free 15 min
📕 Buy this interview preparation book: 100 Spring Boot & Hibernate questions & answers — PDF + EPUB for $5

All 100 Spring Boot & Hibernate questions · All topics