La semana pasada investigadores de Microsoft publicaron un artículo en arXiv titulado «Chispas de inteligencia artificial general: primeros experimentos con GPT-4». En él sostenían que GPT-4 mostró signos tempranos de AGI, lo que significa que posee capacidades iguales o superiores al nivel humano. Luego, si lees el artículo científico, resulta que el título es un…
Mes: marzo 2023
CPU vs. GPU
Esta mañana me ha venido a la cabeza el siguiente par de binomios: GPU/emoción, CPU/razón, así, sin venir a cuento. No recuerdo haberme planteado nunca semejante emparejamiento o leído nada relacionado. Acababa de salir de la cama, solo se me ocurre que la idea pudiera haber originado en algún sueño olvidado. De lo que estoy…
Conversando con GPT-4
Raro sería que estuvieras leyendo estas palabras y no hubieras oído hablar de ChatGPT. OpenAI lo dio a conocer al mundo hace poco más de cinco meses y en enero de 2023, el producto contaba ya con más de 100 millones de usuarios, convirtiéndose en la aplicación para consumidores de más rápido crecimiento hasta la…
Autenticación múltiple en Spring boot: JWT y formulario
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(); } |
…