[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-spring-chto-takoe-securityfilterchain-i-kak-on-rabotaet":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},648,"chto-takoe-securityfilterchain-i-kak-on-rabotaet",14,"spring","Spring","🌱","Что такое SecurityFilterChain и как он работает?","SecurityFilterChain -- цепочка сервлетных фильтров, через которую проходит каждый HTTP-запрос в Spring Security. Каждый фильтр выполняет определённую задачу безопасности.\n\n### Порядок основных фильтров\n\n```\nHTTP запрос\n     |\nSecurityContextPersistenceFilter -- загрузка SecurityContext\n     |\nCsrfFilter -- проверка CSRF-токена\n     |\nLogoutFilter -- обработка logout\n     |\nUsernamePasswordAuthenticationFilter -- логин\u002Fпароль\n     |\nBasicAuthenticationFilter -- HTTP Basic\n     |\nBearerTokenAuthenticationFilter -- JWT\u002FOAuth2\n     |\nExceptionTranslationFilter -- обработка ошибок безопасности\n     |\nAuthorizationFilter -- проверка прав доступа\n     |\nКонтроллер\n```\n\n### Добавление собственного фильтра (JWT)\n\n```java\n@Bean\npublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {\n    http\n        .csrf(csrf -> csrf.disable())\n        .sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))\n        .authorizeHttpRequests(auth -> auth\n            .requestMatchers(HttpMethod.POST, \"\u002Fapi\u002Fauth\u002F**\").permitAll()\n            .anyRequest().authenticated()\n        )\n        .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class);\n    return http.build();\n}\n```\n\n### Несколько SecurityFilterChain\n\n```java\n@Bean @Order(1)\npublic SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {\n    http.securityMatcher(\"\u002Fapi\u002F**\") \u002F\u002F для API -- JWT, без сессий\n        .csrf(csrf -> csrf.disable())\n        .sessionManagement(s -> s.sessionCreationPolicy(SessionCreationPolicy.STATELESS))\n        .authorizeHttpRequests(auth -> auth.anyRequest().authenticated());\n    return http.build();\n}\n\n@Bean @Order(2)\npublic SecurityFilterChain webFilterChain(HttpSecurity http) throws Exception {\n    http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated())\n        .formLogin(Customizer.withDefaults()); \u002F\u002F для веб -- форма логина\n    return http.build();\n}\n```\n\n> **На собеседовании:** покажите знание порядка фильтров и умение добавить свой. Частая ошибка -- забыть `filterChain.doFilter(request, response)` в собственном фильтре (запрос «застрянет»). Также -- неправильный `@Order` при нескольких SecurityFilterChain.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Что такое SecurityFilterChain и как он работает? — Gymterview","SecurityFilterChain -- цепочка сервлетных фильтров, через которую проходит каждый HTTP-запрос в Spring Security. Каждый фильтр выполняет определённую задачу без","SecurityFilterChain -- цепочка сервлетных фильтров, через которую проходит каждый HTTP-запрос в Spring Security. Каждый ",[7,13],"SecurityFilterChain -- цепочка сервлетных фильтров, через которую проходит каждый HTTP-запрос в Spring Security. Каждый фильтр выполняет определённую задачу безопасности.",true]