@Component
public class SessionFilter extends HttpFilter {
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpSession session = request.getSession();
addUserToRequest(session, request);
chain.doFilter(request, response);
}
private void addUserToRequest(HttpSession session, HttpServletRequest request) {
UserDto user = (UserDto) session.getAttribute("user");
if (user == null) {
// Что-нибудь сделать
}
request.setAttribute("user", user);
}
}
Вопрос: Как приостановить получение запросов от пользователя до завершения операции?
<img th:src="@{/files/{id}(id=${file.Id})}">
@RestController
@RequestMapping("/files")
@AllArgsConstructor
public class FileController {
private final FileService fileService;
@GetMapping("/{id}")
public ResponseEntity<?> getById(@PathVariable int id) {
Optional<FileDto> fileDtoOptional = fileService.findById(id);
if (fileDtoOptional.isEmpty()) {
return ResponseEntity.notFound().build();
}
return ResponseEntity.ok(fileDtoOptional.get().content());
}
}
@Service
public class SimpleFileService implements FileService {
private final String storageDirectory;
private final FileRepository fileRepository;
public SimpleFileService(@Value("${file.directory}") String storageDirectory, FileRepository fileRepository) {
this.storageDirectory = storageDirectory;
createStorageDirectory(storageDirectory);
this.fileRepository = fileRepository;
}
private void createStorageDirectory(String storageDirectory) {
try {
Files.createDirectories(Path.of(storageDirectory));
} catch (IOException e) {
// обработать ошибку, залогировать например
}
}
@Override
public Optional<FileDto> findById(int id) {
Optional<File> fileOptional = fileRepository.findById(id);
if (fileOptional.isEmpty()) {
return Optional.empty();
}
byte[] content = readFileAsByte(fileOptional.get().getPath());
return Optional.of(new FileDto(fileOptional.get().getName(), content));
}
private byte[] readFileAsByte(String path) {
try {
return Files.readAllBytes(Path.of(storageDirectory, path));
} catch (IOException e) {
// обработать ошибку, залогировать например
}
}
}
public record FileDto(String name, byte[] content) {
}
@Entity
?Можно еще отключить добавление полей через настройку спринга