[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-kak-rabotayut-annotatsii-preauthorize-i-secured":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},649,"kak-rabotayut-annotatsii-preauthorize-i-secured",14,"spring","Spring","🌱","Как работают аннотации @PreAuthorize и @Secured?","`@PreAuthorize` и `@Secured` обеспечивают авторизацию на уровне методов (method-level security). Требуют `@EnableMethodSecurity` для активации.\n\n| Аспект | @PreAuthorize | @Secured |\n|--------|---------------|----------|\n| SpEL | Да | Нет |\n| Доступ к параметрам | Да (`#param`) | Нет |\n| Комбинирование условий | Да (and, or) | Нет (только OR между ролями) |\n| @PostAuthorize | Да | Нет |\n| Гибкость | Высокая | Минимальная |\n\n```java\n@PreAuthorize(\"hasRole('ADMIN')\")\npublic void deleteUser(Long id) { }\n\n@PreAuthorize(\"hasRole('ADMIN') or #userId == authentication.principal.id\")\npublic UserDto getUserProfile(Long userId) {\n    \u002F\u002F ADMIN видит любой профиль, пользователь -- только свой\n}\n\n@PreAuthorize(\"#request.amount \u003C= 10000 or hasRole('ADMIN')\")\npublic void transfer(TransferRequest request) { }\n\n@Secured(\"ROLE_ADMIN\") \u002F\u002F проще, но без SpEL\npublic void deleteUser(Long id) { }\n```\n\n### Получение текущего пользователя\n\n```java\n@GetMapping(\"\u002Fme\")\npublic UserDto getCurrentUser(@AuthenticationPrincipal UserDetails userDetails) {\n    return userService.findByUsername(userDetails.getUsername());\n}\n```\n\n> **На собеседовании:** ключевое -- `@PreAuthorize` гибче (SpEL, доступ к параметрам), `@Secured` проще. Частая ошибка -- забыть `@EnableMethodSecurity` (аннотации будут проигнорированы) или использовать на private-методах.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Как работают аннотации @PreAuthorize и @Secured? — Gymterview","`@PreAuthorize` и `@Secured` обеспечивают авторизацию на уровне методов (method-level security). Требуют `@EnableMethodSecurity` для активации.","`@PreAuthorize` и `@Secured` обеспечивают авторизацию на уровне методов (method-level security). Требуют `@EnableMethodS",[7,13],true]