From 92ae816ef0fc16677a296f4f9013029376f7332e Mon Sep 17 00:00:00 2001 From: John Thompson Date: Thu, 11 Jun 2020 16:01:23 -0400 Subject: [PATCH 1/8] Adding Spring Sec starter --- pom.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pom.xml b/pom.xml index df7a6cb36..5eb6742a0 100644 --- a/pom.xml +++ b/pom.xml @@ -89,6 +89,10 @@ org.springframework.boot spring-boot-starter-data-jpa + + org.springframework.boot + spring-boot-starter-security + com.h2database h2 From 31ecdb8fecf03b52b4ab9fb565c765fdbdc9b007 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 12 Jun 2020 15:48:41 -0400 Subject: [PATCH 2/8] removing props file --- src/main/resources/static/resources/application.properties | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 src/main/resources/static/resources/application.properties diff --git a/src/main/resources/static/resources/application.properties b/src/main/resources/static/resources/application.properties deleted file mode 100644 index 8d5cc3a7e..000000000 --- a/src/main/resources/static/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Internationalization -spring.messages.basename=messages/messages - From ad0fd5112913cc1a196dec1619e03297aeebdac0 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 12 Jun 2020 15:50:22 -0400 Subject: [PATCH 3/8] adding user and pwd --- src/main/resources/application.properties | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 912080aaa..f6b0661d1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,19 +1,3 @@ -# -# Copyright 2019 the original author or authors. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# spring.application.name=brewery-monolith spring.jackson.serialization.write-dates-as-timestamps=false spring.jackson.serialization.write-date-timestamps-as-nanoseconds=true @@ -23,4 +7,7 @@ spring.messages.basename=messages/messages logging.level.guru=debug # Spring Data hangs when not set under Spring Boot 2.3.0 -spring.data.jpa.repositories.bootstrap-mode=default \ No newline at end of file +spring.data.jpa.repositories.bootstrap-mode=default + +spring.security.user.name=spring +spring.security.user.password=guru \ No newline at end of file From 3c7f463eb2c6e95ace25ca3ae1b778c4ffb6258d Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 12 Jun 2020 17:25:36 -0400 Subject: [PATCH 4/8] adding test --- .../web/controllers/BeerControllerIT.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java diff --git a/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java b/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java new file mode 100644 index 000000000..0b782fb4b --- /dev/null +++ b/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java @@ -0,0 +1,65 @@ +package guru.sfg.brewery.web.controllers; + +import guru.sfg.brewery.repositories.BeerInventoryRepository; +import guru.sfg.brewery.repositories.BeerRepository; +import guru.sfg.brewery.repositories.CustomerRepository; +import guru.sfg.brewery.services.BeerService; +import guru.sfg.brewery.services.BreweryService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.security.test.context.support.WithMockUser; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; + +/** + * Created by jt on 6/12/20. + */ +@WebMvcTest +public class BeerControllerIT { + + @Autowired + WebApplicationContext wac; + + MockMvc mockMvc; + + @MockBean + BeerRepository beerRepository; + + @MockBean + BeerInventoryRepository beerInventoryRepository; + + @MockBean + BreweryService breweryService; + + @MockBean + CustomerRepository customerRepository; + + @MockBean + BeerService beerService; + + @BeforeEach + void setUp() { + mockMvc = MockMvcBuilders + .webAppContextSetup(wac) + .apply(springSecurity()) + .build(); + } + + @WithMockUser("spring") + @Test + void findBeers() throws Exception{ + mockMvc.perform(get("/beers/find")) + .andExpect(status().isOk()) + .andExpect(view().name("beers/findBeers")) + .andExpect(model().attributeExists("beer")); + } + +} From 219ad6c21ad697e12acf8d7c30ee1849074bc6c7 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Fri, 12 Jun 2020 17:39:27 -0400 Subject: [PATCH 5/8] adding test for HTTP Basic --- .../brewery/web/controllers/BeerControllerIT.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java b/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java index 0b782fb4b..010b05165 100644 --- a/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java +++ b/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java @@ -15,6 +15,7 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -62,4 +63,15 @@ void findBeers() throws Exception{ .andExpect(model().attributeExists("beer")); } + @Test + void findBeersWithHttpBasic() throws Exception{ + mockMvc.perform(get("/beers/find").with(httpBasic("spring", "guru"))) + .andExpect(status().isOk()) + .andExpect(view().name("beers/findBeers")) + .andExpect(model().attributeExists("beer")); + } + + + + } From b874d1b9611e502fa492077c9c340d786e656327 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Sat, 13 Jun 2020 13:42:48 -0400 Subject: [PATCH 6/8] adding permit all for index page --- .../sfg/brewery/config/SecurityConfig.java | 27 +++++++++++ .../sfg/brewery/web/controllers/BaseIT.java | 48 +++++++++++++++++++ .../web/controllers/BeerControllerIT.java | 42 +--------------- .../web/controllers/IndexControllerIT.java | 20 ++++++++ 4 files changed, 96 insertions(+), 41 deletions(-) create mode 100644 src/main/java/guru/sfg/brewery/config/SecurityConfig.java create mode 100644 src/test/java/guru/sfg/brewery/web/controllers/BaseIT.java create mode 100644 src/test/java/guru/sfg/brewery/web/controllers/IndexControllerIT.java diff --git a/src/main/java/guru/sfg/brewery/config/SecurityConfig.java b/src/main/java/guru/sfg/brewery/config/SecurityConfig.java new file mode 100644 index 000000000..3f4e07c8f --- /dev/null +++ b/src/main/java/guru/sfg/brewery/config/SecurityConfig.java @@ -0,0 +1,27 @@ +package guru.sfg.brewery.config; + +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.config.annotation.web.configuration.WebSecurityConfigurerAdapter; + +/** + * Created by jt on 6/13/20. + */ +@Configuration +@EnableWebSecurity +public class SecurityConfig extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .authorizeRequests(authorize -> { + authorize.antMatchers("/", "/webjars/**", "/login", "/resources/**").permitAll(); + } ) + .authorizeRequests() + .anyRequest().authenticated() + .and() + .formLogin().and() + .httpBasic(); + } +} diff --git a/src/test/java/guru/sfg/brewery/web/controllers/BaseIT.java b/src/test/java/guru/sfg/brewery/web/controllers/BaseIT.java new file mode 100644 index 000000000..eed1ea0f2 --- /dev/null +++ b/src/test/java/guru/sfg/brewery/web/controllers/BaseIT.java @@ -0,0 +1,48 @@ +package guru.sfg.brewery.web.controllers; + +import guru.sfg.brewery.repositories.BeerInventoryRepository; +import guru.sfg.brewery.repositories.BeerRepository; +import guru.sfg.brewery.repositories.CustomerRepository; +import guru.sfg.brewery.services.BeerService; +import guru.sfg.brewery.services.BreweryService; +import org.junit.jupiter.api.BeforeEach; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; + +/** + * Created by jt on 6/13/20. + */ +public abstract class BaseIT { + @Autowired + WebApplicationContext wac; + + MockMvc mockMvc; + + @MockBean + BeerRepository beerRepository; + + @MockBean + BeerInventoryRepository beerInventoryRepository; + + @MockBean + BreweryService breweryService; + + @MockBean + CustomerRepository customerRepository; + + @MockBean + BeerService beerService; + + @BeforeEach + public void setup() { + mockMvc = MockMvcBuilders + .webAppContextSetup(wac) + .apply(springSecurity()) + .build(); + } +} diff --git a/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java b/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java index 010b05165..c781e8f74 100644 --- a/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java +++ b/src/test/java/guru/sfg/brewery/web/controllers/BeerControllerIT.java @@ -1,22 +1,10 @@ package guru.sfg.brewery.web.controllers; -import guru.sfg.brewery.repositories.BeerInventoryRepository; -import guru.sfg.brewery.repositories.BeerRepository; -import guru.sfg.brewery.repositories.CustomerRepository; -import guru.sfg.brewery.services.BeerService; -import guru.sfg.brewery.services.BreweryService; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.security.test.context.support.WithMockUser; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.httpBasic; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -24,35 +12,7 @@ * Created by jt on 6/12/20. */ @WebMvcTest -public class BeerControllerIT { - - @Autowired - WebApplicationContext wac; - - MockMvc mockMvc; - - @MockBean - BeerRepository beerRepository; - - @MockBean - BeerInventoryRepository beerInventoryRepository; - - @MockBean - BreweryService breweryService; - - @MockBean - CustomerRepository customerRepository; - - @MockBean - BeerService beerService; - - @BeforeEach - void setUp() { - mockMvc = MockMvcBuilders - .webAppContextSetup(wac) - .apply(springSecurity()) - .build(); - } +public class BeerControllerIT extends BaseIT{ @WithMockUser("spring") @Test diff --git a/src/test/java/guru/sfg/brewery/web/controllers/IndexControllerIT.java b/src/test/java/guru/sfg/brewery/web/controllers/IndexControllerIT.java new file mode 100644 index 000000000..5140c3acb --- /dev/null +++ b/src/test/java/guru/sfg/brewery/web/controllers/IndexControllerIT.java @@ -0,0 +1,20 @@ +package guru.sfg.brewery.web.controllers; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +/** + * Created by jt on 6/13/20. + */ +@WebMvcTest +public class IndexControllerIT extends BaseIT { + + @Test + void testGetIndexSlash() throws Exception{ + mockMvc.perform(get("/" )) + .andExpect(status().isOk()); + } +} From c9e109517786d259d551ce906fa8d62ccfdefa02 Mon Sep 17 00:00:00 2001 From: John Thompson Date: Mon, 6 Jul 2020 13:22:50 -0400 Subject: [PATCH 7/8] updating course url --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 9b5f5f5e0..649581d20 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ -[![CircleCI](https://circleci.com/gh/sfg-beer-works/brewery-monolith.svg?style=svg)](https://circleci.com/gh/sfg-beer-works/brewery-monolith) # Brewery Spring MVC Monolith This repository contains source code examples used to support my on-line courses about the Spring Framework. You can learn more about the courses here: -* [Spring Security Core: Beginner to Guru](https://www.udemy.com/course/spring-boot-microservices-with-spring-cloud-beginner-to-guru/?referralCode=6142D427AE53031FEF38) +* [Spring Security Core: Beginner to Guru](https://www.udemy.com/course/spring-security-core-beginner-to-guru/?referralCode=306F288EB78688C0F3BC) * [Spring Boot Microservices with Spring Cloud](https://www.udemy.com/course/spring-boot-microservices-with-spring-cloud-beginner-to-guru/?referralCode=6142D427AE53031FEF38) * [Spring Framework 5: Beginner to Guru](https://www.udemy.com/course/spring-framework-5-beginner-to-guru/?referralCode=6D9ECD1F93988FEE5CE9) * [Testing Spring Boot: Beginner to Guru](https://www.udemy.com/course/testing-spring-boot-beginner-to-guru/?referralCode=EFFE87DDE96C8541B2EE) From 73d352fcb9d955d37c4c7d76bf1bdcdb4fd7a9f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ula=C5=9F=20Bayram?= Date: Sat, 6 Mar 2021 00:20:22 +0300 Subject: [PATCH 8/8] Adding urls --- src/main/java/guru/sfg/brewery/config/SecurityConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/guru/sfg/brewery/config/SecurityConfig.java b/src/main/java/guru/sfg/brewery/config/SecurityConfig.java index 3f4e07c8f..7e2b4c442 100644 --- a/src/main/java/guru/sfg/brewery/config/SecurityConfig.java +++ b/src/main/java/guru/sfg/brewery/config/SecurityConfig.java @@ -16,7 +16,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests(authorize -> { - authorize.antMatchers("/", "/webjars/**", "/login", "/resources/**").permitAll(); + authorize.antMatchers("/", "/webjars/**", "/login", "/resources/**").permitAll() + .antMatchers("/beers/find", "/beers*").permitAll(); } ) .authorizeRequests() .anyRequest().authenticated()