Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Домашняя работа 4 #4

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open

Домашняя работа 4 #4

wants to merge 6 commits into from

Conversation

Qngdjas
Copy link
Owner

@Qngdjas Qngdjas commented Nov 1, 2024

Частично разобрался с контекстами, встретился со следующими проблемами:
API:
1. Наилучшим вариантом обработки исключений является GlobalExceptionHandler'ом?
2. Права доступа (аутентифицирован или нет) лучше перехватывать AuthInterceptor'ом?

Config:
1. Не понимаю роли application.yml в чистом Spring MVC. Средства чтения yml доступны в Boot, поэтому либо парсить ручками, либо с помощью библиотек. Отсюда не до конца понятно требование вынести конфиг в yml - перспективнее выглядит properties, потому что работа с ним возможна из коробки.
Концепция инициализации параметров подключения в рамках RootContext'а или любого другого контекста понятна.
2. Избавился от web.xml в пользу JavaConfiguration но не до конца разобрался с разными подходами конфигурирования, в частности с аннотациями @configuration, @EnableWebMvc и связи между AppConfig и WebConfig.
3. Из п. 2 - не получилось сконфигурировать тестовое окружение для контроллеров с использованием MockMvc.


@GetMapping(value = "/habits", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<HabitDTO>> list() {
List<HabitDTO> habits = habitService.getAll(1)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хардкодить идентификатор — это плохая практика. Если необходимо передавать константу, лучше вынести ее в отдельное место. В данном случае стоит получать идентификатор пользователя из токена аутентификации. Также я не вижу, чтобы проводилась проверка прав доступа к методам сервиса. Это важный аспект безопасности, который необходимо учитывать.


@RestController
@RequiredArgsConstructor
@RequestMapping("/habits")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Зачем этот класс? Если он не содержит в себе никакой логики, лучше удалить.

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String email = (String) request.getSession().getAttribute("email");
if (email == null) {
response.sendRedirect("api/v1/login");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Следуюет возвращать 401 вместо перенаправления для API. Это более стандартный подход.

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authInterceptor)
.excludePathPatterns("/api/v1/login, /api/v1/register");
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Следует убрать кавычки и передать пути как отдельные аргументы.

@YlabCourse
Copy link
Collaborator

API: 1. Да, использование GlobalExceptionHandler хороший способ для обработки ошибки, который позволяет централизовано обработать ошибки и вынести эту логику из контроллера.
2. AuthInterceptor подходит для проверки аутентификации, но если необходимо добавить более сложную проверку, например, роли пользователя, лучше использовать другие инструменты.

Config:

  1. Да, Spring MVC не содержит в себе инструментов для работы с application.yml, но использование этого формата несет в себе множество плюсов. Кроме того, будет лучше, если ты сможешь разобраться самостоятельно, как можно с помощью сторонних библиотек парсить конфигурационный файл.
    1. В интернете много информации, которая поможет разобраться с этим недопониманием, например, вот статья, которая поможет с EnableWebMvc аннотацией: Spring MVC - Importing configurations with @EnableWebMvc

@Qngdjas
Copy link
Owner Author

Qngdjas commented Nov 5, 2024

Спасибо за пояснения

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants