Escenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
@Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .headers() .frameOptions() .disable() .addHeaderWriter(new StaticHeadersWriter("Content-Security-Policy", "frame-ancestors 'self'")) .and() .csrf() .requireCsrfProtectionMatcher(new AndRequestMatcher(CsrfFilter.DEFAULT_CSRF_MATCHER, new RegexRequestMatcher("^(?!/api/)", null))) .and() .authorizeRequests() .antMatchers("/").fullyAuthenticated() .antMatchers("/client/**").hasAnyAuthority("CLIENT", "SUPER_ADMIN", "ADMIN") .antMatchers("/admin/**").hasAnyAuthority("SUPER_ADMIN", "ADMIN") .antMatchers("/actuator/**").hasAnyAuthority("SUPER_ADMIN", "ADMIN") .antMatchers("/api/auth/**").permitAll() .antMatchers("/api/**").hasAnyAuthority("ADMIN", "SUPER_ADMIN", "CLIENT", "API_USER") .and() .formLogin() .loginPage("/user/login") .successHandler(successHandler()) .failureUrl("/user/login?error=true") .defaultSuccessUrl("/") .usernameParameter("username") .and() .logout() .logoutRequestMatcher(new AntPathRequestMatcher("/user/logout")) .deleteCookies("remember-me") .logoutSuccessUrl("/user/login") .and() .rememberMe() .userDetailsService(userDetailsService); return http.build(); } |
…