diff --git a/spring-boot-security-taglibs/src/main/java/org/baeldung/security/ApplicationConfig.java b/spring-boot-security-taglibs/src/main/java/org/baeldung/security/ApplicationConfig.java index 6283a102aa..763422e6df 100644 --- a/spring-boot-security-taglibs/src/main/java/org/baeldung/security/ApplicationConfig.java +++ b/spring-boot-security-taglibs/src/main/java/org/baeldung/security/ApplicationConfig.java @@ -1,40 +1,41 @@ package org.baeldung.security; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.crypto.factory.PasswordEncoderFactories; -import org.springframework.security.crypto.password.PasswordEncoder; +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; @SpringBootApplication @Configuration @EnableWebSecurity public class ApplicationConfig extends WebSecurityConfigurerAdapter { - public static final String DEFAULT_PASSWORD = "password"; + // Using withDefaultPasswordEncoder and InMemoryUserDetailsManager for demonstration and testing purpose + @Bean @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - PasswordEncoder encoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); + public UserDetailsService userDetailsService() { + UserDetails user = User.withDefaultPasswordEncoder() + .username("testUser") + .password("password") + .roles("ADMIN") + .build(); - auth.inMemoryAuthentication() - .passwordEncoder(encoder) - .withUser("testUser") - .password(encoder.encode(DEFAULT_PASSWORD)) - .roles("ADMIN"); + return new InMemoryUserDetailsManager(user); } @Override protected void configure(HttpSecurity http) throws Exception { - http.csrf(); - - http.authorizeRequests() - .antMatchers("/**") - .permitAll() - .and() - .httpBasic(); + // @formatter:off + http.csrf() + .and() + .authorizeRequests() + .anyRequest().permitAll().and().httpBasic(); + // @formatter:on } } diff --git a/spring-boot-security-taglibs/src/main/java/org/baeldung/security/HomeController.java b/spring-boot-security-taglibs/src/main/java/org/baeldung/security/HomeController.java index e697e7e301..cdd4c3f42b 100644 --- a/spring-boot-security-taglibs/src/main/java/org/baeldung/security/HomeController.java +++ b/spring-boot-security-taglibs/src/main/java/org/baeldung/security/HomeController.java @@ -1,6 +1,7 @@ package org.baeldung.security; import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; @@ -9,8 +10,9 @@ import javax.servlet.http.HttpServletResponse; @Controller @RequestMapping("/") public class HomeController { - @RequestMapping("") - public String home(HttpServletRequest request, HttpServletResponse response) { + + @GetMapping + public String home() { return "home"; } } diff --git a/spring-boot-security-taglibs/src/main/resources/application.properties b/spring-boot-security-taglibs/src/main/resources/application.properties index 9c49bd2137..218868405f 100644 --- a/spring-boot-security-taglibs/src/main/resources/application.properties +++ b/spring-boot-security-taglibs/src/main/resources/application.properties @@ -1,8 +1,3 @@ #jsp config spring.mvc.view.prefix: /WEB-INF/views/ spring.mvc.view.suffix: .jsp -spring.http.encoding.charset=UTF-8 -# Enable http encoding support. -spring.http.encoding.enabled=true -# Force the encoding to the configured charset on HTTP requests and responses. -spring.http.encoding.force=true diff --git a/spring-boot-security-taglibs/src/main/webapp/WEB-INF/views/home.jsp b/spring-boot-security-taglibs/src/main/webapp/WEB-INF/views/home.jsp index c13590a3df..7291608e3e 100644 --- a/spring-boot-security-taglibs/src/main/webapp/WEB-INF/views/home.jsp +++ b/spring-boot-security-taglibs/src/main/webapp/WEB-INF/views/home.jsp @@ -1,5 +1,7 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%> +<%@ page language="java" contentType="text/html; charset=UTF-8" + pageEncoding="UTF-8"%> +<%@ taglib prefix="sec" + uri="http://www.springframework.org/security/tags"%> @@ -8,21 +10,22 @@ Home Page + + ANONYMOUS + - AUTHENTICATED + AUTHENTICATED + + ADMIN ROLE + +

+ principal.username: + +

+
+ + Text Field:
+
- - ADMIN ROLE - -

- principal.username: - -

-
- - Text Field: -
- - \ No newline at end of file diff --git a/spring-boot-security-taglibs/src/test/java/org/baeldung/security/HomeControllerTest.java b/spring-boot-security-taglibs/src/test/java/org/baeldung/security/HomeControllerTest.java index c9c8698254..c005185c92 100644 --- a/spring-boot-security-taglibs/src/test/java/org/baeldung/security/HomeControllerTest.java +++ b/spring-boot-security-taglibs/src/test/java/org/baeldung/security/HomeControllerTest.java @@ -1,5 +1,6 @@ package org.baeldung.security; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; @@ -18,11 +19,13 @@ public class HomeControllerTest { private TestRestTemplate restTemplate; @Test - public void home() throws Exception { - String body = this.restTemplate.withBasicAuth("testUser", ApplicationConfig.DEFAULT_PASSWORD) + public void whenUserIsAuthenticatedThenAuthenticatedSectionsShowOnSite() throws Exception { + String body = this.restTemplate.withBasicAuth("testUser", "password") .getForEntity("/", String.class) .getBody(); - System.out.println(body); + + // test + assertFalse(body.contains("ANONYMOUS")); // test assertTrue(body.contains("AUTHENTICATED")); @@ -31,7 +34,7 @@ public class HomeControllerTest { assertTrue(body.contains("ADMIN ROLE")); // test - assertTrue(body.contains("principal.username: testUser")); + assertTrue(body.contains("testUser")); // test assertTrue(body.contains(" assertTrue(body.contains("")); } + + @Test + public void whenUserIsNotAuthenticatedThenOnlyAnonymousSectionsShowOnSite() throws Exception { + String body = this.restTemplate.getForEntity("/", String.class) + .getBody(); + + // test + assertTrue(body.contains("ANONYMOUS")); + + // test + assertFalse(body.contains("AUTHENTICATED")); + } }