Я работаю над приложением весенней загрузки, в котором я создал класс CustomUserDetails, расширив UserDetails следующим образом.
public class CustomUserDetails
extends org.springframework.security.core.userdetails.User {
private static final long serialVersionUID = 1L;
/**
* The extra field in the login form is for the tenant name
*/
private String tenant;
private Long userId;
private String firstName;
private String middleName;
private String lastName;
private String email;
private String role;
Мне нужно изменить детали арендатора в объекте UserDetails.Для этого я проверил следующие действия:
Как обновлять ссылки Spring Security UserDetails после успешного входа в систему?
https://stackanswers.net/questions/how-to-immediately-enable-the-authority-after-update-user-authority-in-spring-security
https://dev.to/onlineinterview/user-account-loginregistration-feature-with-spring-boot--3fc3
И Контроллер находится здесь, где я обновляю объект аутентификации:
@PreAuthorize("hasRole('SUPER_ADMIN')")
@GetMapping(path = "/useTenant/{tenantId}", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public ResponseEntity<ResponseDTO> useTenant(@PathVariable Long tenantId) {
HttpStatus status = HttpStatus.OK;
boolean error = false;
String message = languageMessageService.getMessage(MultiLanguageKey.SUCCESS);
// fetch master tenant by id
Optional<MasterTenant> optional = masterTenantService.findById(tenantId);
if (optional.isPresent()) {
CustomUserDetails customUserDetails = customUserDetailsService.getUserDetail();
//Changing Tenant ID
customUserDetails.setTenant(optional.get().getTenantId());
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication instanceof UsernamePasswordAuthenticationToken) {
// Update Current user by changing tenant id in SecurityContextHolder
UsernamePasswordAuthenticationToken auth = (UsernamePasswordAuthenticationToken) authentication;
auth.setDetails(customUserDetails);
SecurityContextHolder.getContext().setAuthentication(auth);
}
} else {
error = false;
message = languageMessageService.getMessage(MultiLanguageKey.TENANT_NOT_FOUND);
}
return new ResponseEntity<>(new ResponseDTO(error, message), status);
}
Моя проблема в том, что, когда я нажимаю другой запрос на выполнение определенного действия, я не нашел подробностей арендатора в CustomUserDetailsобъект, который извлекается из
SecurityContextHolder.getContext (). getAuthentication ()
Пожалуйста, дайте мне знать, как я могу обновить или изменить объект UserDetails Аутентификации и сохранить обратно, чтобыдругой запрос обновляется CustomUserDetails.