[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-spring-security":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},626,"chto-takoe-spring-security",14,"spring","Spring","🌱","Что такое Spring Security?","Spring Security -- фреймворк для обеспечения безопасности Java-приложений, отвечающий за аутентификацию (кто ты?), авторизацию (что тебе разрешено?) и защиту от распространённых атак (CSRF, Session Fixation).\n\n### Что даёт «из коробки»\n\n- Все эндпоинты защищены (требуют аутентификации)\n- Форма логина `\u002Flogin`\n- Защита от CSRF\n- Заголовки безопасности (X-Frame-Options, X-Content-Type-Options)\n\n### Базовая конфигурация (Spring Security 6+)\n\n\u003Cdetails>\n\u003Csummary>Пример SecurityConfig\u003C\u002Fsummary>\n\n```java\n@Configuration\n@EnableWebSecurity\npublic class SecurityConfig {\n\n    @Bean\n    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {\n        http\n            .csrf(csrf -> csrf.disable()) \u002F\u002F для REST API\n            .authorizeHttpRequests(auth -> auth\n                .requestMatchers(\"\u002Fapi\u002Fpublic\u002F**\").permitAll()\n                .requestMatchers(\"\u002Fapi\u002Fadmin\u002F**\").hasRole(\"ADMIN\")\n                .requestMatchers(\"\u002Fapi\u002Fusers\u002F**\").hasAnyRole(\"USER\", \"ADMIN\")\n                .anyRequest().authenticated()\n            )\n            .httpBasic(Customizer.withDefaults());\n        return http.build();\n    }\n\n    @Bean\n    public UserDetailsService userDetailsService() {\n        UserDetails user = User.builder()\n                .username(\"user\")\n                .password(passwordEncoder().encode(\"password\"))\n                .roles(\"USER\").build();\n        return new InMemoryUserDetailsManager(user);\n    }\n\n    @Bean\n    public PasswordEncoder passwordEncoder() {\n        return new BCryptPasswordEncoder();\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### UserDetailsService для загрузки из БД\n\n```java\n@Service\npublic class CustomUserDetailsService implements UserDetailsService {\n    @Override\n    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {\n        com.example.entity.User user = userRepository.findByUsername(username)\n                .orElseThrow(() -> new UsernameNotFoundException(\"Не найден: \" + username));\n        return org.springframework.security.core.userdetails.User.builder()\n                .username(user.getUsername())\n                .password(user.getPassword())\n                .roles(user.getRoles().stream().map(Role::getName).toArray(String[]::new))\n                .build();\n    }\n}\n```\n\n> **На собеседовании:** покажите понимание архитектуры (фильтры, UserDetailsService, PasswordEncoder). Частая ошибка -- хранить пароли в открытом виде или забыть отключить CSRF для REST API без сессий (403 при POST).","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое Spring Security? — Gymterview","Spring Security -- фреймворк для обеспечения безопасности Java-приложений, отвечающий за аутентификацию (кто ты?), авторизацию (что тебе разрешено?) и защиту от","Spring Security -- фреймворк для обеспечения безопасности Java-приложений, отвечающий за аутентификацию (кто ты?), автор",[7,13],"Spring Security -- фреймворк для обеспечения безопасности Java-приложений, отвечающий за аутентификацию (кто ты?), авторизацию (что тебе разрешено?) и защиту от распространённых атак (CSRF, Session Fixation).",true]