pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
config
package com.example.demo.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class ParamConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((requests) -> requests
.requestMatchers("/demo/{id}")
)
.formLogin((form) -> form
.loginPage("/login")
.permitAll()
)
.logout((logout) -> logout.permitAll());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails user =
User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
controller
@RestController
public class DemoController {
@GetMapping("/demo/{id}")
public String getDemo(@PathVariable String id) {
return format("get %s", id);
}
@PostMapping("/demo/{id}")
public String postDemo(@PathVariable String id) {
return format("post %s", id);
}
}
Stacktrace
/usr/lib/jvm/java-17-openjdk-amd64/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:37873,suspend=y,server=n -javaagent:/media/michael/750/ProgramFiles/idea-IC-233.14015.106/plugins/java/lib/rt/debugger-agent.jar -Dfile.encoding=UTF-8 -classpath /home/michael/IdeaProjects/demo/target/classes:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-security/3.2.5/spring-boot-starter-security-3.2.5.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter/3.2.5/spring-boot-starter-3.2.5.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot/3.2.5/spring-boot-3.2.5.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-autoconfigure/3.2.5/spring-boot-autoconfigure-3.2.5.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-logging/3.2.5/spring-boot-starter-logging-3.2.5.jar:/home/michael/.m2/repository/ch/qos/logback/logback-classic/1.4.14/logback-classic-1.4.14.jar:/home/michael/.m2/repository/ch/qos/logback/logback-core/1.4.14/logback-core-1.4.14.jar:/home/michael/.m2/repository/org/apache/logging/log4j/log4j-to-slf4j/2.21.1/log4j-to-slf4j-2.21.1.jar:/home/michael/.m2/repository/org/apache/logging/log4j/log4j-api/2.21.1/log4j-api-2.21.1.jar:/home/michael/.m2/repository/org/slf4j/jul-to-slf4j/2.0.13/jul-to-slf4j-2.0.13.jar:/home/michael/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/home/michael/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar:/home/michael/.m2/repository/org/springframework/spring-aop/6.1.6/spring-aop-6.1.6.jar:/home/michael/.m2/repository/org/springframework/spring-beans/6.1.6/spring-beans-6.1.6.jar:/home/michael/.m2/repository/org/springframework/security/spring-security-config/6.2.4/spring-security-config-6.2.4.jar:/home/michael/.m2/repository/org/springframework/security/spring-security-core/6.2.4/spring-security-core-6.2.4.jar:/home/michael/.m2/repository/org/springframework/security/spring-security-crypto/6.2.4/spring-security-crypto-6.2.4.jar:/home/michael/.m2/repository/org/springframework/spring-context/6.1.6/spring-context-6.1.6.jar:/home/michael/.m2/repository/org/springframework/security/spring-security-web/6.2.4/spring-security-web-6.2.4.jar:/home/michael/.m2/repository/org/springframework/spring-expression/6.1.6/spring-expression-6.1.6.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-web/3.2.5/spring-boot-starter-web-3.2.5.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-json/3.2.5/spring-boot-starter-json-3.2.5.jar:/home/michael/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.15.4/jackson-databind-2.15.4.jar:/home/michael/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.15.4/jackson-annotations-2.15.4.jar:/home/michael/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.15.4/jackson-core-2.15.4.jar:/home/michael/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.15.4/jackson-datatype-jdk8-2.15.4.jar:/home/michael/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.15.4/jackson-datatype-jsr310-2.15.4.jar:/home/michael/.m2/repository/com/fasterxml/jackson/module/jackson-module-parameter-names/2.15.4/jackson-module-parameter-names-2.15.4.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-tomcat/3.2.5/spring-boot-starter-tomcat-3.2.5.jar:/home/michael/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/10.1.20/tomcat-embed-core-10.1.20.jar:/home/michael/.m2/repository/org/apache/tomcat/embed/tomcat-embed-el/10.1.20/tomcat-embed-el-10.1.20.jar:/home/michael/.m2/repository/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.20/tomcat-embed-websocket-10.1.20.jar:/home/michael/.m2/repository/org/springframework/spring-web/6.1.6/spring-web-6.1.6.jar:/home/michael/.m2/repository/io/micrometer/micrometer-observation/1.12.5/micrometer-observation-1.12.5.jar:/home/michael/.m2/repository/io/micrometer/micrometer-commons/1.12.5/micrometer-commons-1.12.5.jar:/home/michael/.m2/repository/org/springframework/spring-webmvc/6.1.6/spring-webmvc-6.1.6.jar:/home/michael/.m2/repository/org/slf4j/slf4j-api/2.0.13/slf4j-api-2.0.13.jar:/home/michael/.m2/repository/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar:/home/michael/.m2/repository/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar:/home/michael/.m2/repository/net/bytebuddy/byte-buddy/1.14.13/byte-buddy-1.14.13.jar:/home/michael/.m2/repository/org/springframework/spring-core/6.1.6/spring-core-6.1.6.jar:/home/michael/.m2/repository/org/springframework/spring-jcl/6.1.6/spring-jcl-6.1.6.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-data-jpa/3.2.5/spring-boot-starter-data-jpa-3.2.5.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-aop/3.2.5/spring-boot-starter-aop-3.2.5.jar:/home/michael/.m2/repository/org/aspectj/aspectjweaver/1.9.22/aspectjweaver-1.9.22.jar:/home/michael/.m2/repository/org/springframework/boot/spring-boot-starter-jdbc/3.2.5/spring-boot-starter-jdbc-3.2.5.jar:/home/michael/.m2/repository/com/zaxxer/HikariCP/5.0.1/HikariCP-5.0.1.jar:/home/michael/.m2/repository/org/springframework/spring-jdbc/6.1.6/spring-jdbc-6.1.6.jar:/home/michael/.m2/repository/org/hibernate/orm/hibernate-core/6.4.4.Final/hibernate-core-6.4.4.Final.jar:/home/michael/.m2/repository/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar:/home/michael/.m2/repository/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar:/home/michael/.m2/repository/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar:/home/michael/.m2/repository/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar:/home/michael/.m2/repository/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar:/home/michael/.m2/repository/com/fasterxml/classmate/1.6.0/classmate-1.6.0.jar:/home/michael/.m2/repository/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar:/home/michael/.m2/repository/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar:/home/michael/.m2/repository/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar:/home/michael/.m2/repository/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar:/home/michael/.m2/repository/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar:/home/michael/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar:/home/michael/.m2/repository/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar:/home/michael/.m2/repository/org/springframework/data/spring-data-jpa/3.2.5/spring-data-jpa-3.2.5.jar:/home/michael/.m2/repository/org/springframework/data/spring-data-commons/3.2.5/spring-data-commons-3.2.5.jar:/home/michael/.m2/repository/org/springframework/spring-orm/6.1.6/spring-orm-6.1.6.jar:/home/michael/.m2/repository/org/springframework/spring-tx/6.1.6/spring-tx-6.1.6.jar:/home/michael/.m2/repository/org/springframework/spring-aspects/6.1.6/spring-aspects-6.1.6.jar:/home/michael/.m2/repository/com/h2database/h2/2.2.224/h2-2.2.224.jar:/media/michael/750/ProgramFiles/idea-IC-233.14015.106/lib/idea_rt.jar com.example.demo.DemoApplication
Connected to the target VM, address: ‘127.0.0.1:37873’, transport: ‘socket’
. ____ _ __ _ _
/ / ‘ __ _ () __ __ _
( ( )__ | ‘_ | ‘| | ‘ / ` |
/ __)| |)| | | | | || (| | ) ) ) )
‘ || .__|| ||| |_, | / / / /
=========||==============|/=////
:: Spring Boot :: (v3.2.5)
2024-04-30T10:08:52.155+03:00 INFO 16961 — [demo] [ main] com.example.demo.DemoApplication : Starting DemoApplication using Java 17.0.10 with PID 16961 (/home/michael/IdeaProjects/demo/target/classes started by michael in /home/michael/IdeaProjects/demo)
2024-04-30T10:08:52.159+03:00 INFO 16961 — [demo] [ main] com.example.demo.DemoApplication : No active profile set, falling back to 1 default profile: “default”
2024-04-30T10:08:52.687+03:00 INFO 16961 — [demo] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2024-04-30T10:08:52.702+03:00 INFO 16961 — [demo] [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 9 ms. Found 0 JPA repository interfaces.
2024-04-30T10:08:53.133+03:00 INFO 16961 — [demo] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
2024-04-30T10:08:53.144+03:00 INFO 16961 — [demo] [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2024-04-30T10:08:53.144+03:00 INFO 16961 — [demo] [ main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.20]
2024-04-30T10:08:53.188+03:00 INFO 16961 — [demo] [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2024-04-30T10:08:53.190+03:00 INFO 16961 — [demo] [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 974 ms
2024-04-30T10:08:53.317+03:00 INFO 16961 — [demo] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Starting…
2024-04-30T10:08:53.460+03:00 INFO 16961 — [demo] [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 – Added connection conn0: url=jdbc:h2:mem:9678794b-58ab-4a08-bd16-747581a7cb71 user=SA
2024-04-30T10:08:53.461+03:00 INFO 16961 — [demo] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 – Start completed.
2024-04-30T10:08:53.494+03:00 INFO 16961 — [demo] [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2024-04-30T10:08:53.529+03:00 INFO 16961 — [demo] [ main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.4.4.Final
2024-04-30T10:08:53.553+03:00 INFO 16961 — [demo] [ main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
2024-04-30T10:08:53.719+03:00 INFO 16961 — [demo] [ main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
2024-04-30T10:08:53.992+03:00 INFO 16961 — [demo] [ main] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000489: No JTA platform available (set ‘hibernate.transaction.jta.platform’ to enable JTA platform integration)
2024-04-30T10:08:53.995+03:00 INFO 16961 — [demo] [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit ‘default’
2024-04-30T10:08:54.036+03:00 WARN 16961 — [demo] [ main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2024-04-30T10:08:54.051+03:00 WARN 16961 — [demo] [ main] o.s.security.core.userdetails.User : User.withDefaultPasswordEncoder() is considered unsafe for production and is only intended for sample applications.
2024-04-30T10:08:54.353+03:00 INFO 16961 — [demo] [ main] o.s.s.web.DefaultSecurityFilterChain : Will secure any request with [org.springframework.security.web.session.DisableEncodeUrlFilter@4746fb8c, org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@3be46d9c, org.springframework.security.web.context.SecurityContextHolderFilter@5e020dd1, org.springframework.security.web.header.HeaderWriterFilter@3815a7d1, org.springframework.web.filter.CorsFilter@41d877bb, org.springframework.security.web.csrf.CsrfFilter@628bd77e, org.springframework.security.web.authentication.logout.LogoutFilter@2bc59ab7, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@59c08cf1, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@f0c1ae1, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@783dc0e7, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@39c5a105, org.springframework.security.web.access.ExceptionTranslationFilter@632b5c79, org.springframework.security.web.access.intercept.AuthorizationFilter@799971ac]
2024-04-30T10:08:54.546+03:00 INFO 16961 — [demo] [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path ”
2024-04-30T10:08:54.556+03:00 INFO 16961 — [demo] [ main] com.example.demo.DemoApplication : Started DemoApplication in 2.759 seconds (process running for 3.18)
2024-04-30T10:09:02.444+03:00 INFO 16961 — [demo] [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet ‘dispatcherServlet’
2024-04-30T10:09:02.444+03:00 INFO 16961 — [demo] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet ‘dispatcherServlet’
2024-04-30T10:09:02.446+03:00 INFO 16961 — [demo] [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
Problem
There seems to be a redirect loop.
Could you help me understand why this infinite redirect happens and how to cope with it?