package com.plannaplan.controllers; import java.util.Optional; import com.plannaplan.entities.User; import com.plannaplan.exceptions.UserNotFoundException; import com.plannaplan.services.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.authentication.AnonymousAuthenticationToken; /** * Abstract class for controllers that requires token to extra authorize action * beyond spring security */ public abstract class TokenBasedController { @Autowired protected UserService userService; public TokenBasedController() { } /** * @return get currect user based no current spring context * @throws UserNotFoundException if user was not fount */ protected Optional getCurrentUser() throws UserNotFoundException { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (!(authentication instanceof AnonymousAuthenticationToken)) { return Optional.of(this.userService.getUserByEmail(authentication.getName())); } else { return Optional.empty(); } } }