diff --git a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/TestController.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyController.java similarity index 89% rename from spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/TestController.java rename to spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyController.java index f5c82f2260..308b0a8d51 100644 --- a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/TestController.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyController.java @@ -4,7 +4,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -public class TestController { +public class JettyController { @RequestMapping public String helloJetty() { return "hello Jetty"; diff --git a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyWebApplication.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyWebApplication.java index f692d0ff23..ebb2a8e188 100644 --- a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyWebApplication.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/JettyWebApplication.java @@ -2,7 +2,6 @@ package com.baeldung.spring.session.jettyex; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.web.bind.annotation.RestController; @SpringBootApplication public class JettyWebApplication { diff --git a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/SecurityConfig.java b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/SecurityConfig.java index 28cdb3cc08..5ce8f9a042 100644 --- a/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/SecurityConfig.java +++ b/spring-session/jetty-session-demo/src/main/java/com/baeldung/spring/session/jettyex/SecurityConfig.java @@ -13,9 +13,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http - .sessionManagement() - .sessionCreationPolicy(SessionCreationPolicy.NEVER) - .and() + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER).and() .authorizeRequests().anyRequest().hasRole("ADMIN"); } } diff --git a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java index 7476d7305d..0f467dd104 100644 --- a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java +++ b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/SecurityConfig.java @@ -13,16 +13,17 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication() - .withUser("admin").password("password").roles("ADMIN"); + auth + .inMemoryAuthentication() + .withUser("admin").password("password").roles("ADMIN"); } @Override protected void configure(HttpSecurity http) throws Exception { http - .httpBasic().and() - .authorizeRequests() - .antMatchers("/tomcat/admin").hasRole("ADMIN") - .anyRequest().authenticated(); + .httpBasic().and() + .authorizeRequests() + .antMatchers("/tomcat/admin").hasRole("ADMIN") + .anyRequest().authenticated(); } } diff --git a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TestController.java b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatController.java similarity index 90% rename from spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TestController.java rename to spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatController.java index 9728ff7fc9..a241158294 100644 --- a/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TestController.java +++ b/spring-session/tomcat-session-demo/src/main/java/com/baeldung/spring/session/tomcatex/TomcatController.java @@ -4,7 +4,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController -public class TestController { +public class TomcatController { @RequestMapping("/tomcat/admin") public String helloTomcatAdmin() { return "hello tomcat admin"; diff --git a/spring-session/tomcat-session-demo/src/test/java/com/baeldung/spring/session/tomcatex/TomcatControllerTest.java b/spring-session/tomcat-session-demo/src/test/java/com/baeldung/spring/session/tomcatex/TomcatControllerTest.java new file mode 100644 index 0000000000..5bfb7e9411 --- /dev/null +++ b/spring-session/tomcat-session-demo/src/test/java/com/baeldung/spring/session/tomcatex/TomcatControllerTest.java @@ -0,0 +1,103 @@ +package com.baeldung.spring.session.tomcatex; + +import org.apache.tomcat.util.codec.binary.Base64; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.embedded.LocalServerPort; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.data.redis.connection.RedisConnection; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.http.*; +import org.springframework.test.context.junit4.SpringRunner; + +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +@RunWith(SpringRunner.class) +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class TomcatControllerTest { + + @Autowired + private TestRestTemplate restTemplate; + @LocalServerPort + private int port; + @Autowired + private JedisConnectionFactory jedisConnectionFactory; + private RedisConnection connection; + + @Before + public void clearRedisData() { + connection = jedisConnectionFactory.getConnection(); + connection.flushAll(); + } + + @Test + public void testRedisIsEmpty() { + Set result = connection.keys("*".getBytes()); + assertEquals(0, result.size()); + } + + @Test + public void testForbiddenToProtectedEndpoint() { + ResponseEntity result = restTemplate.getForEntity("/tomcat/admin", String.class); + assertEquals(HttpStatus.UNAUTHORIZED, result.getStatusCode()); + } + + @Test + public void testLoginAddsRedisKey() { + ResponseEntity result = makeRequest(); + assertEquals("hello tomcat admin", result.getBody()); //login worked + + Set redisResult = connection.keys("*".getBytes()); + assertTrue(redisResult.size() > 0); //redis was populated with data + } + + @Test //requires that the jetty service is running on port 8081 + public void testFailureAccessingJettyResourceWithTomcatSessionToken() { + //call the jetty server with the token + ResponseEntity jettyResult = restTemplate.getForEntity("http://localhost:8081", String.class); + assertEquals(HttpStatus.UNAUTHORIZED, jettyResult.getStatusCode()); //login worked + } + + @Test //requires that the jetty service is running on port 8081 + public void testAccessingJettyResourceWithTomcatSessionToken() { + //login to get a session token + ResponseEntity result = makeRequest(); + assertEquals("hello tomcat admin", result.getBody()); //login worked + + assertTrue(result.getHeaders().containsKey("Set-Cookie")); + + String setCookieValue = result.getHeaders().get("Set-Cookie").get(0); + String sessionCookie = setCookieValue.split(";")[0]; + String sessionValue = sessionCookie.split("=")[1]; + + //Add session token to headers + HttpHeaders headers = new HttpHeaders(); + headers.add("x-auth-token", sessionValue); + + //call the jetty server with the token + HttpEntity request = new HttpEntity<>(headers); + ResponseEntity jettyResult = restTemplate.exchange("http://localhost:8081", HttpMethod.GET, request, String.class); + assertEquals("hello Jetty", jettyResult.getBody()); //login worked + + } + + private ResponseEntity makeRequest() { + String plainCreds = "admin:password"; + byte[] plainCredsBytes = plainCreds.getBytes(); + byte[] base64CredsBytes = Base64.encodeBase64(plainCredsBytes); + String base64Creds = new String(base64CredsBytes); + + HttpHeaders headers = new HttpHeaders(); + headers.add("Authorization", "Basic " + base64Creds); + + HttpEntity request = new HttpEntity<>(headers); + return restTemplate.exchange("http://localhost:" + port + "/tomcat/admin", HttpMethod.GET, request, String.class); + } + +} \ No newline at end of file