diff --git a/apache-libraries-2/pom.xml b/apache-libraries-2/pom.xml index d188204208..2e7ef0344c 100644 --- a/apache-libraries-2/pom.xml +++ b/apache-libraries-2/pom.xml @@ -19,10 +19,29 @@ validation-api ${javax.validation.validation-api.version} + + org.apache.camel + camel-core + ${camel.version} + + + + org.apache.camel + camel-test-junit5 + ${camel.version} + test + + + + org.apache.camel + camel-main + ${camel.version} + 2.0.1.Final + 4.3.0 \ No newline at end of file diff --git a/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java new file mode 100644 index 0000000000..a28c3959a4 --- /dev/null +++ b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterBean.java @@ -0,0 +1,29 @@ +package com.baeldung.dynamicrouter; + +import org.apache.camel.ExchangeProperties; + +import java.util.Map; + +public class DynamicRouterBean { + public String route(String body, @ExchangeProperties Map properties) { + int invoked = (int) properties.getOrDefault("invoked", 0) + 1; + + properties.put("invoked", invoked); + + if (invoked == 1) { + switch (body.toLowerCase()) { + case "mock": + return "mock:dynamicRouter"; + case "direct": + return "mock:directDynamicRouter"; + case "seda": + return "mock:sedaDynamicRouter"; + case "file": + return "mock:fileDynamicRouter"; + default: + break; + } + } + return null; + } +} diff --git a/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java new file mode 100644 index 0000000000..875263f0b1 --- /dev/null +++ b/apache-libraries-2/src/main/java/com/baeldung/dynamicrouter/DynamicRouterRoute.java @@ -0,0 +1,13 @@ +package com.baeldung.dynamicrouter; + +import org.apache.camel.builder.RouteBuilder; + +public class DynamicRouterRoute extends RouteBuilder { + + @Override + public void configure() { + + from("direct:dynamicRouter").dynamicRouter(method(DynamicRouterBean.class, "route")); + + } +} diff --git a/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java b/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java new file mode 100644 index 0000000000..6401fa4be2 --- /dev/null +++ b/apache-libraries-2/src/test/java/dynamicrouter/DynamicRouterRouteUnitTest.java @@ -0,0 +1,61 @@ +package dynamicrouter; + +import com.baeldung.dynamicrouter.DynamicRouterRoute; +import org.apache.camel.RoutesBuilder; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.test.junit5.CamelTestSupport; +import org.junit.jupiter.api.Test; + +public class DynamicRouterRouteUnitTest extends CamelTestSupport { + + @Override + protected RoutesBuilder createRouteBuilder() { + return new DynamicRouterRoute(); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndMockAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = getMockEndpoint("mock:dynamicRouter"); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("mock")); + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndDirectAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = context.getEndpoint("mock:directDynamicRouter", MockEndpoint.class); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("direct")); + + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndSedaAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = context.getEndpoint("mock:sedaDynamicRouter", MockEndpoint.class); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("seda")); + MockEndpoint.assertIsSatisfied(context); + } + + @Test + void givenDynamicRouter_whenMockEndpointExpectedMessageCountOneAndBookAsMessageBody_thenMessageSentToDynamicRouter() throws InterruptedException { + + MockEndpoint mockDynamicEndpoint = getMockEndpoint("mock:fileDynamicRouter"); + mockDynamicEndpoint.expectedMessageCount(1); + + template.send("direct:dynamicRouter", exchange -> exchange.getIn() + .setBody("file")); + MockEndpoint.assertIsSatisfied(context); + } + +} \ No newline at end of file diff --git a/lightrun/lightrun-tasks-service/pom.xml b/lightrun/lightrun-tasks-service/pom.xml index 773c81a9d5..c27ef103b9 100644 --- a/lightrun/lightrun-tasks-service/pom.xml +++ b/lightrun/lightrun-tasks-service/pom.xml @@ -48,6 +48,7 @@ org.apache.activemq artemis-jms-server + ${activemq.version} org.springframework.boot @@ -65,4 +66,8 @@ + + 2.32.0 + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 7cc23680e7..a20b7f5796 100644 --- a/pom.xml +++ b/pom.xml @@ -1169,7 +1169,7 @@ 2.2 1.3 4.4.0 - 1.14.6 + 1.14.11 diff --git a/spring-aop-2/src/main/java/com/baeldung/logging/GreetingServiceWithoutAOP.java b/spring-aop-2/src/main/java/com/baeldung/logging/GreetingServiceWithoutAOP.java index eee90af669..f13c70f93b 100644 --- a/spring-aop-2/src/main/java/com/baeldung/logging/GreetingServiceWithoutAOP.java +++ b/spring-aop-2/src/main/java/com/baeldung/logging/GreetingServiceWithoutAOP.java @@ -10,9 +10,9 @@ public class GreetingServiceWithoutAOP { private static final Logger logger = LoggerFactory.getLogger(GreetingServiceWithoutAOP.class); public String greet(String name) { - logger.info(">> greet() - {}", name); + logger.debug(">> greet() - {}", name); String result = String.format("Hello %s", name); - logger.info("<< greet() - {}", result); + logger.debug("<< greet() - {}", result); return result; } } diff --git a/spring-aop-2/src/main/java/com/baeldung/logging/LoggingAspect.java b/spring-aop-2/src/main/java/com/baeldung/logging/LoggingAspect.java index 6641b70eec..82b52bea25 100644 --- a/spring-aop-2/src/main/java/com/baeldung/logging/LoggingAspect.java +++ b/spring-aop-2/src/main/java/com/baeldung/logging/LoggingAspect.java @@ -28,13 +28,13 @@ public class LoggingAspect { public void logBefore(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); String methodName = joinPoint.getSignature().getName(); - logger.info(">> {}() - {}", methodName, Arrays.toString(args)); + logger.debug(">> {}() - {}", methodName, Arrays.toString(args)); } @AfterReturning(value = "publicMethodsFromLoggingPackage()", returning = "result") public void logAfter(JoinPoint joinPoint, Object result) { String methodName = joinPoint.getSignature().getName(); - logger.info("<< {}() - {}", methodName, result); + logger.debug("<< {}() - {}", methodName, result); } @AfterThrowing(pointcut = "publicMethodsFromLoggingPackage()", throwing = "exception") @@ -47,9 +47,9 @@ public class LoggingAspect { public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { Object[] args = joinPoint.getArgs(); String methodName = joinPoint.getSignature().getName(); - logger.info(">> {}() - {}", methodName, Arrays.toString(args)); + logger.debug(">> {}() - {}", methodName, Arrays.toString(args)); Object result = joinPoint.proceed(); - logger.info("<< {}() - {}", methodName, result); + logger.debug("<< {}() - {}", methodName, result); return result; } } diff --git a/spring-ejb-modules/spring-ejb-client/pom.xml b/spring-ejb-modules/spring-ejb-client/pom.xml index b3a65db32b..a94a2e96e0 100644 --- a/spring-ejb-modules/spring-ejb-client/pom.xml +++ b/spring-ejb-modules/spring-ejb-client/pom.xml @@ -50,6 +50,18 @@ io.undertow undertow-servlet + + org.wildfly + wildfly-naming-client + + + org.jboss + jboss-ejb-client + + + org.wildfly.common + wildfly-common + diff --git a/spring-ejb-modules/spring-ejb-client/src/main/java/com/baeldung/springejbclient/SpringEjbClientApplication.java b/spring-ejb-modules/spring-ejb-client/src/main/java/com/baeldung/springejbclient/SpringEjbClientApplication.java index 554fac3417..1f04dcb113 100644 --- a/spring-ejb-modules/spring-ejb-client/src/main/java/com/baeldung/springejbclient/SpringEjbClientApplication.java +++ b/spring-ejb-modules/spring-ejb-client/src/main/java/com/baeldung/springejbclient/SpringEjbClientApplication.java @@ -21,7 +21,7 @@ public class SpringEjbClientApplication { Properties jndiProps = new Properties(); jndiProps.put("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory"); jndiProps.put("jboss.naming.client.ejb.context", true); - jndiProps.put("java.naming.provider.url", "http-remoting://localhost:8080"); + jndiProps.put("java.naming.provider.url", "remote+http://localhost:8080"); return new InitialContext(jndiProps); } @@ -37,7 +37,7 @@ public class SpringEjbClientApplication { @SuppressWarnings("rawtypes") private String getFullName(Class classType) { - String moduleName = "spring-ejb-remote/"; + String moduleName = "ejb:/spring-ejb-remote/"; String beanName = classType.getSimpleName(); String viewClassName = classType.getName(); diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/HandleInstanceAlreadyExistsException.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/HandleInstanceAlreadyExistsException.java new file mode 100644 index 0000000000..1de39987b8 --- /dev/null +++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/HandleInstanceAlreadyExistsException.java @@ -0,0 +1,56 @@ +package com.baeldung.spring.kafka.kafkaexception; + +import java.lang.management.ManagementFactory; +import java.util.Properties; +import java.util.UUID; + +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.common.serialization.StringSerializer; + +public class HandleInstanceAlreadyExistsException { + + public static void generateUniqueClientIDUsingUUIDRandom() { + Properties props = new Properties(); + props.put("bootstrap.servers", "localhost:9092"); + props.put("key.serializer", StringSerializer.class); + props.put("value.serializer", StringSerializer.class); + + String clientId = "my-producer-" + UUID.randomUUID(); + props.setProperty("client.id", clientId); + KafkaProducer producer1 = new KafkaProducer<>(props); + + clientId = "my-producer-" + UUID.randomUUID(); + props.setProperty("client.id", clientId); + KafkaProducer producer2 = new KafkaProducer<>(props); + } + + public static void closeProducerProperlyBeforeReinstantiate() { + Properties props = new Properties(); + props.put("bootstrap.servers", "localhost:9092"); + props.put("client.id", "my-producer"); + props.put("key.serializer", StringSerializer.class); + props.put("value.serializer", StringSerializer.class); + + KafkaProducer producer1 = new KafkaProducer<>(props); + producer1.close(); + + producer1 = new KafkaProducer<>(props); + } + + public static void useUniqueObjectName() throws Exception { + MBeanServer mBeanServer1 = ManagementFactory.getPlatformMBeanServer(); + MBeanServer mBeanServer2 = ManagementFactory.getPlatformMBeanServer(); + + ObjectName objectName1 = new ObjectName("kafka.server:type=KafkaMetrics,id=metric1"); + ObjectName objectName2 = new ObjectName("kafka.server:type=KafkaMetrics,id=metric2"); + + MyMBean mBean1 = new MyMBean(); + mBeanServer1.registerMBean(mBean1, objectName1); + + MyMBean mBean2 = new MyMBean(); + mBeanServer2.registerMBean(mBean2, objectName2); + } +} diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/KafkaAppMain.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/KafkaAppMain.java new file mode 100644 index 0000000000..14d6b71b10 --- /dev/null +++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/KafkaAppMain.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.kafka.kafkaexception; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class KafkaAppMain { + + public static void main(String[] args) { + SpringApplication.run(KafkaAppMain.class, args); + } +} diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/SimulateInstanceAlreadyExistsException.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/SimulateInstanceAlreadyExistsException.java new file mode 100644 index 0000000000..d454d317f2 --- /dev/null +++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/kafkaexception/SimulateInstanceAlreadyExistsException.java @@ -0,0 +1,123 @@ +package com.baeldung.spring.kafka.kafkaexception; + +import java.lang.management.ManagementFactory; +import java.util.Properties; + +import javax.management.Attribute; +import javax.management.AttributeList; +import javax.management.AttributeNotFoundException; +import javax.management.DynamicMBean; +import javax.management.InvalidAttributeValueException; +import javax.management.MBeanAttributeInfo; +import javax.management.MBeanConstructorInfo; +import javax.management.MBeanException; +import javax.management.MBeanInfo; +import javax.management.MBeanNotificationInfo; +import javax.management.MBeanOperationInfo; +import javax.management.MBeanServer; +import javax.management.ObjectName; +import javax.management.ReflectionException; + +import org.apache.kafka.clients.consumer.KafkaConsumer; +import org.apache.kafka.clients.producer.KafkaProducer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.stereotype.Service; + +@Service +public class SimulateInstanceAlreadyExistsException { + + public static void jmxRegistrationConflicts() throws Exception { + // Create two instances of MBeanServer + MBeanServer mBeanServer1 = ManagementFactory.getPlatformMBeanServer(); + MBeanServer mBeanServer2 = ManagementFactory.getPlatformMBeanServer(); + + // Define the same ObjectName for both MBeans + ObjectName objectName = new ObjectName("kafka.server:type=KafkaMetrics"); + + // Create and register the first MBean + MyMBean mBean1 = new MyMBean(); + mBeanServer1.registerMBean(mBean1, objectName); + + // Attempt to register the second MBean with the same ObjectName + MyMBean mBean2 = new MyMBean(); + mBeanServer2.registerMBean(mBean2, objectName); + } + + public static void duplicateConsumerClientID() { + Properties props = new Properties(); + props.put("bootstrap.servers", "localhost:9092"); + props.put("client.id", "my-consumer"); + props.put("group.id", "test-group"); + props.put("key.deserializer", StringDeserializer.class); + props.put("value.deserializer", StringDeserializer.class); + + // Simulating concurrent client creation by multiple threads + for (int i = 0; i < 3; i++) { + new Thread(() -> { + KafkaConsumer consumer = new KafkaConsumer<>(props); + }).start(); + } + } + + public void duplicateProducerClientID() throws Exception { + Properties props = new Properties(); + props.put("bootstrap.servers", "localhost:9092"); + props.put("client.id", "my-producer"); + props.put("key.serializer", StringSerializer.class); + props.put("value.serializer", StringSerializer.class); + + KafkaProducer producer1 = new KafkaProducer<>(props); + // Attempting to create another producer using same client.id + KafkaProducer producer2 = new KafkaProducer<>(props); + } + + public static void unclosedProducerAndReinitialize() { + Properties props = new Properties(); + props.put("bootstrap.servers", "localhost:9092"); + props.put("client.id", "my-producer"); + props.put("key.serializer", StringSerializer.class); + props.put("value.serializer", StringSerializer.class); + + KafkaProducer producer1 = new KafkaProducer<>(props); + // Attempting to reinitialize without proper close + producer1 = new KafkaProducer<>(props); + } +} + +class MyMBean implements DynamicMBean { + + @Override + public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException { + return null; + } + + @Override + public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException { + + } + + @Override + public AttributeList getAttributes(String[] attributes) { + return null; + } + + @Override + public AttributeList setAttributes(AttributeList attributes) { + return null; + } + + @Override + public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException, ReflectionException { + return null; + } + + @Override + public MBeanInfo getMBeanInfo() { + MBeanAttributeInfo[] attributes = new MBeanAttributeInfo[0]; + MBeanConstructorInfo[] constructors = new MBeanConstructorInfo[0]; + MBeanOperationInfo[] operations = new MBeanOperationInfo[0]; + MBeanNotificationInfo[] notifications = new MBeanNotificationInfo[0]; + return new MBeanInfo(MyMBean.class.getName(), "My MBean", attributes, constructors, operations, notifications); + } +} diff --git a/spring-security-modules/spring-security-web-login-2/pom.xml b/spring-security-modules/spring-security-web-login-2/pom.xml index a44543a6ba..be2352b299 100644 --- a/spring-security-modules/spring-security-web-login-2/pom.xml +++ b/spring-security-modules/spring-security-web-login-2/pom.xml @@ -10,8 +10,9 @@ com.baeldung - spring-security-modules + parent-boot-3 0.0.1-SNAPSHOT + ../../parent-boot-3 @@ -29,7 +30,7 @@ org.thymeleaf.extras - thymeleaf-extras-springsecurity5 + thymeleaf-extras-springsecurity6 org.springframework @@ -56,4 +57,7 @@ + + com.baeldung.manuallogout.ManualLogoutApplication + \ No newline at end of file diff --git a/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/logoutredirects/securityconfig/SpringSecurityConfig.java b/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/logoutredirects/securityconfig/SpringSecurityConfig.java index ae2cdc20ec..99059112bc 100644 --- a/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/logoutredirects/securityconfig/SpringSecurityConfig.java +++ b/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/logoutredirects/securityconfig/SpringSecurityConfig.java @@ -1,20 +1,20 @@ package com.baeldung.logoutredirects.securityconfig; -import javax.servlet.http.HttpServletResponse; - 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.web.SecurityFilterChain; +import jakarta.servlet.http.HttpServletResponse; + @Configuration @EnableWebSecurity public class SpringSecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { - http.authorizeRequests(authz -> authz.mvcMatchers("/login") + http.authorizeHttpRequests(authz -> authz.requestMatchers("/login") .permitAll() .anyRequest() .authenticated()) diff --git a/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java b/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java index 3991d9a264..92ee4a84a6 100644 --- a/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java +++ b/spring-security-modules/spring-security-web-login-2/src/main/java/com/baeldung/manuallogout/SimpleSecurityConfiguration.java @@ -5,9 +5,6 @@ import static org.springframework.security.web.header.writers.ClearSiteDataHeade import static org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter.Directive.EXECUTION_CONTEXTS; import static org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter.Directive.STORAGE; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Bean; @@ -20,11 +17,14 @@ import org.springframework.security.web.authentication.logout.HeaderWriterLogout import org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler; import org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; + @Configuration @EnableWebSecurity public class SimpleSecurityConfiguration { - private static Logger logger = LoggerFactory.getLogger(SimpleSecurityConfiguration.class); + private static final Logger logger = LoggerFactory.getLogger(SimpleSecurityConfiguration.class); @Order(4) @Configuration @@ -32,8 +32,8 @@ public class SimpleSecurityConfiguration { @Bean public SecurityFilterChain filterChainLogoutOnRequest(HttpSecurity http) throws Exception { - http.antMatcher("/request/**") - .authorizeRequests(authz -> authz.anyRequest() + http.securityMatcher("/request/**") + .authorizeHttpRequests(authz -> authz.anyRequest() .permitAll()) .logout(logout -> logout.logoutUrl("/request/logout") .addLogoutHandler((request, response, auth) -> { @@ -53,8 +53,8 @@ public class SimpleSecurityConfiguration { @Bean public SecurityFilterChain filterChainDefaultLogout(HttpSecurity http) throws Exception { - http.antMatcher("/basic/**") - .authorizeRequests(authz -> authz.anyRequest() + http.securityMatcher("/basic/**") + .authorizeHttpRequests(authz -> authz.anyRequest() .permitAll()) .logout(logout -> logout.logoutUrl("/basic/basiclogout")); return http.build(); @@ -67,8 +67,8 @@ public class SimpleSecurityConfiguration { @Bean public SecurityFilterChain filterChainAllCookieClearing(HttpSecurity http) throws Exception { - http.antMatcher("/cookies/**") - .authorizeRequests(authz -> authz.anyRequest() + http.securityMatcher("/cookies/**") + .authorizeHttpRequests(authz -> authz.anyRequest() .permitAll()) .logout(logout -> logout.logoutUrl("/cookies/cookielogout") .addLogoutHandler(new SecurityContextLogoutHandler()) @@ -92,8 +92,8 @@ public class SimpleSecurityConfiguration { @Bean public SecurityFilterChain filterChainClearSiteDataHeader(HttpSecurity http) throws Exception { - http.antMatcher("/csd/**") - .authorizeRequests(authz -> authz.anyRequest() + http.securityMatcher("/csd/**") + .authorizeHttpRequests(authz -> authz.anyRequest() .permitAll()) .logout(logout -> logout.logoutUrl("/csd/csdlogout") .addLogoutHandler(new HeaderWriterLogoutHandler(new ClearSiteDataHeaderWriter(SOURCE)))); diff --git a/spring-security-modules/spring-security-web-login-2/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java b/spring-security-modules/spring-security-web-login-2/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java index a9ad907c30..528bb5e80f 100644 --- a/spring-security-modules/spring-security-web-login-2/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java +++ b/spring-security-modules/spring-security-web-login-2/src/test/java/com/baeldung/manuallogout/ManualLogoutIntegrationTest.java @@ -9,9 +9,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpSession; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +19,9 @@ import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpSession; + @RunWith(SpringRunner.class) @WebMvcTest(SimpleSecurityConfiguration.class) public class ManualLogoutIntegrationTest {