cubetiq-fusion/src/main/java/com/cubetiqs/fusion/security/AuthenticatedUser.java
2021-07-25 10:44:30 +00:00

48 lines
1.7 KiB
Java

package com.cubetiqs.fusion.security;
import java.util.Optional;
import com.cubetiqs.fusion.data.entity.User;
import com.cubetiqs.fusion.data.service.UserRepository;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.server.VaadinServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler;
import org.springframework.stereotype.Component;
@Component
public class AuthenticatedUser {
@Autowired
private UserRepository userRepository;
private UserDetails getAuthenticatedUser() {
SecurityContext context = SecurityContextHolder.getContext();
Object principal = context.getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
UserDetails userDetails = (UserDetails) context.getAuthentication().getPrincipal();
return userDetails;
}
return null;
}
public Optional<User> get() {
UserDetails details = getAuthenticatedUser();
if (details == null) {
return Optional.empty();
}
return Optional.of(userRepository.findByUsername(details.getUsername()));
}
public void logout() {
UI.getCurrent().getPage().setLocation(SecurityConfiguration.LOGOUT_URL);
SecurityContextLogoutHandler logoutHandler = new SecurityContextLogoutHandler();
logoutHandler.logout(VaadinServletRequest.getCurrent().getHttpServletRequest(), null, null);
}
}