48 lines
1.7 KiB
Java
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);
|
|
}
|
|
|
|
}
|