Este año me he matriculado de nueve asignaturas, una de ellas anual de modo que me ha tocado preparar diez exámenes. A diferencia de convocatorias anteriores este segundo cuatrimestre he decido estudiarlo a base de hacer tests, muchos tests. No he leído de antemano los manuales, ni siquiera he utilizado apuntes. También he prescindido de…
Bicicletas
El cerebro tiende a engañarnos haciéndonos creer que por saber el nombre de un cosa ya entendemos cómo funciona. Cuanto más cotidiano es el objeto o evento más fácil es dejarnos engañar. Todos sabemos que la luna pasa por distintas fases, lo podemos contemplar con nuestros propios ojos, ¿pero sabemos cuál es el proceso que…
Las chispas de GPT-4
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…
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(); } |
…
TemplateInputException
Escenario Lo habré hecho centenares de veces. Desarrollo en local, pruebas y despliegue en remoto. Según el entorno en el que esté corriendo la aplicación, ésta podrá requerir una configuración distinta. Por ejemplo en un entorno de desarrollo querremos tener el caché deshabilitado o el nivel de los registros más bajo que en uno de…
Panasonic RR-US361
Escenario Panasonic RR-US361 es una grabadora portátil de audio que, por la información que he podido recopilar, debe datar de principios de siglo. La utilizo de vez en cuando para grabar mis sueños. Me resulta más cómodo que el móvil por dos razones. Evito la luz de la pantalla, y no corro el riesgo de…
Changelog: de MD a HTML
Escenario Me gusta que las aplicaciones Spring Boot en las que trabajo consten de un fichero de tipo markdown con el histórico de cambios por los que ha pasado el código. Dado que el número de versión aumenta cada vez que publico un cambio en el entorno de producción, gracias a un formato de este…
Cómo crear una cabecera de licencia en Netbeans
Escenario Un encabezado en los ficheros de código puede ser un requisito del trabajo o del proyecto de código abierto al que contribuyes. O sencillamente te gusta que tus ficheros de código dispongan de un impronta común. Problema En realidad ninguno. Supongo que la mayoría de los editores modernos ofrecen la posibilidad de usar una…