diff --git a/2022-05/spring-25/.gitignore b/2022-05/spring-25/.gitignore new file mode 100644 index 00000000..4ea52072 --- /dev/null +++ b/2022-05/spring-25/.gitignore @@ -0,0 +1,24 @@ +target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/build/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ diff --git a/2022-05/spring-25/classwork/pom.xml b/2022-05/spring-25/classwork/pom.xml new file mode 100644 index 00000000..d6e02673 --- /dev/null +++ b/2022-05/spring-25/classwork/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + classwork + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.6.10 + + + + UTF-8 + UTF-8 + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.security + spring-security-test + ${spring-security.version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2022-05/spring-25/src/main/java/ru/otus/spring/Main.java b/2022-05/spring-25/classwork/src/main/java/ru/otus/spring/Main.java similarity index 100% rename from 2022-05/spring-25/src/main/java/ru/otus/spring/Main.java rename to 2022-05/spring-25/classwork/src/main/java/ru/otus/spring/Main.java diff --git a/2022-05/spring-25/src/main/java/ru/otus/spring/rest/PagesController.java b/2022-05/spring-25/classwork/src/main/java/ru/otus/spring/controller/PagesController.java similarity index 83% rename from 2022-05/spring-25/src/main/java/ru/otus/spring/rest/PagesController.java rename to 2022-05/spring-25/classwork/src/main/java/ru/otus/spring/controller/PagesController.java index 1fa8da0c..293aa679 100644 --- a/2022-05/spring-25/src/main/java/ru/otus/spring/rest/PagesController.java +++ b/2022-05/spring-25/classwork/src/main/java/ru/otus/spring/controller/PagesController.java @@ -1,12 +1,9 @@ -package ru.otus.spring.rest; +package ru.otus.spring.controller; -import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContext; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; @Controller public class PagesController { diff --git a/2022-05/spring-25/src/main/java/ru/otus/spring/security/AnonimusUD.java b/2022-05/spring-25/classwork/src/main/java/ru/otus/spring/security/AnonimusUD.java similarity index 100% rename from 2022-05/spring-25/src/main/java/ru/otus/spring/security/AnonimusUD.java rename to 2022-05/spring-25/classwork/src/main/java/ru/otus/spring/security/AnonimusUD.java diff --git a/2022-05/spring-25/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2022-05/spring-25/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java similarity index 100% rename from 2022-05/spring-25/src/main/java/ru/otus/spring/security/SecurityConfiguration.java rename to 2022-05/spring-25/classwork/src/main/java/ru/otus/spring/security/SecurityConfiguration.java diff --git a/2022-05/spring-25/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java b/2022-05/spring-25/classwork/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java similarity index 100% rename from 2022-05/spring-25/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java rename to 2022-05/spring-25/classwork/src/main/java/ru/otus/spring/security/filter/MyOwnFilter.java diff --git a/2022-05/spring-25/src/main/resources/application.yml b/2022-05/spring-25/classwork/src/main/resources/application.yml similarity index 100% rename from 2022-05/spring-25/src/main/resources/application.yml rename to 2022-05/spring-25/classwork/src/main/resources/application.yml diff --git a/2022-05/spring-25/src/main/resources/templates/authenticated.html b/2022-05/spring-25/classwork/src/main/resources/templates/authenticated.html similarity index 100% rename from 2022-05/spring-25/src/main/resources/templates/authenticated.html rename to 2022-05/spring-25/classwork/src/main/resources/templates/authenticated.html diff --git a/2022-05/spring-25/src/main/resources/templates/error.html b/2022-05/spring-25/classwork/src/main/resources/templates/error.html similarity index 100% rename from 2022-05/spring-25/src/main/resources/templates/error.html rename to 2022-05/spring-25/classwork/src/main/resources/templates/error.html diff --git a/2022-05/spring-25/src/main/resources/templates/index.html b/2022-05/spring-25/classwork/src/main/resources/templates/index.html similarity index 100% rename from 2022-05/spring-25/src/main/resources/templates/index.html rename to 2022-05/spring-25/classwork/src/main/resources/templates/index.html diff --git a/2022-05/spring-25/src/main/resources/templates/public.html b/2022-05/spring-25/classwork/src/main/resources/templates/public.html similarity index 100% rename from 2022-05/spring-25/src/main/resources/templates/public.html rename to 2022-05/spring-25/classwork/src/main/resources/templates/public.html diff --git a/2022-05/spring-25/src/main/resources/templates/success.html b/2022-05/spring-25/classwork/src/main/resources/templates/success.html similarity index 100% rename from 2022-05/spring-25/src/main/resources/templates/success.html rename to 2022-05/spring-25/classwork/src/main/resources/templates/success.html diff --git a/2022-05/spring-25/src/test/java/ru/otus/spring/rest/PagesControllerTest.java b/2022-05/spring-25/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java similarity index 91% rename from 2022-05/spring-25/src/test/java/ru/otus/spring/rest/PagesControllerTest.java rename to 2022-05/spring-25/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java index 3f84fa46..d6d1456c 100644 --- a/2022-05/spring-25/src/test/java/ru/otus/spring/rest/PagesControllerTest.java +++ b/2022-05/spring-25/classwork/src/test/java/ru/otus/spring/controller/PagesControllerTest.java @@ -1,4 +1,4 @@ -package ru.otus.spring.rest; +package ru.otus.spring.controller; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -7,7 +7,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; diff --git a/2022-05/spring-25/pom.xml b/2022-05/spring-25/pom.xml index 590e9bc8..552539aa 100644 --- a/2022-05/spring-25/pom.xml +++ b/2022-05/spring-25/pom.xml @@ -5,57 +5,16 @@ 4.0.0 ru.otus - spring-framework-23-auth - 1.0-SNAPSHOT + spring-security-classwork + 1.0 - - org.springframework.boot - spring-boot-starter-parent - 2.6.10 - + pom - - UTF-8 - UTF-8 - 17 - - - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - - - org.springframework.boot - spring-boot-starter-security - - - - - org.springframework.boot - spring-boot-starter-test - - - - org.springframework.security - spring-security-test - ${spring-security.version} - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + classwork + solution1 + solution2 + solution3 + solution4 + diff --git a/2022-05/spring-25/solution1/pom.xml b/2022-05/spring-25/solution1/pom.xml new file mode 100644 index 00000000..76c1f7b2 --- /dev/null +++ b/2022-05/spring-25/solution1/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + solution1 + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.6.10 + + + + UTF-8 + UTF-8 + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.security + spring-security-test + ${spring-security.version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/Main.java b/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..5406a277 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,12 @@ +package ru.otus.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class); + } +} diff --git a/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/controller/PagesController.java b/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/controller/PagesController.java new file mode 100644 index 00000000..fbb05072 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/controller/PagesController.java @@ -0,0 +1,34 @@ +package ru.otus.spring.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class PagesController { + + @GetMapping("/") + public String indexPage() { + return "index"; + } + + @GetMapping("/public") + public String publicPage() { + return "public"; + } + + @GetMapping("/authenticated") + public String authenticatedPage() { + return "authenticated"; + } + + @GetMapping("/success") + public String successPage() { + return "success"; + } + + + @GetMapping("/error") + public String errorPage() { + return "error"; + } +} diff --git a/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/security/SecurityConfiguration.java new file mode 100644 index 00000000..adfe6484 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/java/ru/otus/spring/security/SecurityConfiguration.java @@ -0,0 +1,46 @@ +package ru.otus.spring.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +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.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.password.NoOpPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@EnableWebSecurity +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Override + public void configure( WebSecurity web ) { + web.ignoring().antMatchers( "/" ); + } + + @Override + public void configure( HttpSecurity http ) throws Exception { + http.csrf().disable() + .authorizeRequests().antMatchers( "/public" ).permitAll() + .and() + .authorizeRequests().antMatchers( "/authenticated", "/success" ).authenticated() + .and() + + .formLogin() + .defaultSuccessUrl("/success") + .failureForwardUrl("/error") + ; + } + + @SuppressWarnings("deprecation") + @Bean + public PasswordEncoder passwordEncoder() { + return NoOpPasswordEncoder.getInstance(); + } + + @Autowired + public void configure( AuthenticationManagerBuilder auth ) throws Exception { + auth.inMemoryAuthentication() + .withUser( "admin" ).password( "password" ).roles( "ADMIN" ); + } +} diff --git a/2022-05/spring-25/solution1/src/main/resources/application.yml b/2022-05/spring-25/solution1/src/main/resources/application.yml new file mode 100644 index 00000000..0151c503 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/resources/application.yml @@ -0,0 +1,4 @@ +logging: + level: + root: error + org.springframework: error \ No newline at end of file diff --git a/2022-05/spring-25/solution1/src/main/resources/templates/authenticated.html b/2022-05/spring-25/solution1/src/main/resources/templates/authenticated.html new file mode 100644 index 00000000..0d2043f0 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/resources/templates/authenticated.html @@ -0,0 +1,10 @@ + + + + + Только для авторизованных + + +Только для авторизованных + + diff --git a/2022-05/spring-25/solution1/src/main/resources/templates/error.html b/2022-05/spring-25/solution1/src/main/resources/templates/error.html new file mode 100644 index 00000000..ba4e50a2 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/resources/templates/error.html @@ -0,0 +1,10 @@ + + + + + Упс... + + +Что-то пошло не так. Печалька + + diff --git a/2022-05/spring-25/solution1/src/main/resources/templates/index.html b/2022-05/spring-25/solution1/src/main/resources/templates/index.html new file mode 100644 index 00000000..f2d1d1ae --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/resources/templates/index.html @@ -0,0 +1,12 @@ + + + + + Главная страница + + +/public +
+/authenticated + + diff --git a/2022-05/spring-25/solution1/src/main/resources/templates/public.html b/2022-05/spring-25/solution1/src/main/resources/templates/public.html new file mode 100644 index 00000000..b9f93817 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/resources/templates/public.html @@ -0,0 +1,10 @@ + + + + + Доступен всем + + +Доступен всем + + diff --git a/2022-05/spring-25/solution1/src/main/resources/templates/success.html b/2022-05/spring-25/solution1/src/main/resources/templates/success.html new file mode 100644 index 00000000..58414c01 --- /dev/null +++ b/2022-05/spring-25/solution1/src/main/resources/templates/success.html @@ -0,0 +1,10 @@ + + + + + Вы успешно вошли ! + + +Вы успешно вошли ! + + diff --git a/2022-05/spring-25/solution2/pom.xml b/2022-05/spring-25/solution2/pom.xml new file mode 100644 index 00000000..fe4aa6b2 --- /dev/null +++ b/2022-05/spring-25/solution2/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + solution2 + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.6.10 + + + + UTF-8 + UTF-8 + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.security + spring-security-test + ${spring-security.version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/Main.java b/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..5406a277 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,12 @@ +package ru.otus.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class); + } +} diff --git a/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/controller/PagesController.java b/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/controller/PagesController.java new file mode 100644 index 00000000..fbb05072 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/controller/PagesController.java @@ -0,0 +1,34 @@ +package ru.otus.spring.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class PagesController { + + @GetMapping("/") + public String indexPage() { + return "index"; + } + + @GetMapping("/public") + public String publicPage() { + return "public"; + } + + @GetMapping("/authenticated") + public String authenticatedPage() { + return "authenticated"; + } + + @GetMapping("/success") + public String successPage() { + return "success"; + } + + + @GetMapping("/error") + public String errorPage() { + return "error"; + } +} diff --git a/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java new file mode 100644 index 00000000..56a18ac9 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/java/ru/otus/spring/security/SecurityConfiguration.java @@ -0,0 +1,45 @@ +package ru.otus.spring.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +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.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.crypto.password.NoOpPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@EnableWebSecurity +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Override + public void configure( WebSecurity web ) { + web.ignoring().antMatchers( "/" ); + } + + @Override + public void configure( HttpSecurity http ) throws Exception { + http.csrf().disable() + .authorizeRequests().antMatchers( "/public" ).permitAll() + .and() + .authorizeRequests().antMatchers( "/authenticated", "/success" ).authenticated() + + .and() + .httpBasic() + .realmName("AnyRealm") + ; + } + + @SuppressWarnings("deprecation") + @Bean + public PasswordEncoder passwordEncoder() { + return NoOpPasswordEncoder.getInstance(); + } + + @Autowired + public void configure( AuthenticationManagerBuilder auth ) throws Exception { + auth.inMemoryAuthentication() + .withUser( "admin" ).password( "password" ).roles( "ADMIN" ); + } +} diff --git a/2022-05/spring-25/solution2/src/main/resources/application.yml b/2022-05/spring-25/solution2/src/main/resources/application.yml new file mode 100644 index 00000000..0151c503 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/resources/application.yml @@ -0,0 +1,4 @@ +logging: + level: + root: error + org.springframework: error \ No newline at end of file diff --git a/2022-05/spring-25/solution2/src/main/resources/templates/authenticated.html b/2022-05/spring-25/solution2/src/main/resources/templates/authenticated.html new file mode 100644 index 00000000..0d2043f0 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/resources/templates/authenticated.html @@ -0,0 +1,10 @@ + + + + + Только для авторизованных + + +Только для авторизованных + + diff --git a/2022-05/spring-25/solution2/src/main/resources/templates/error.html b/2022-05/spring-25/solution2/src/main/resources/templates/error.html new file mode 100644 index 00000000..ba4e50a2 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/resources/templates/error.html @@ -0,0 +1,10 @@ + + + + + Упс... + + +Что-то пошло не так. Печалька + + diff --git a/2022-05/spring-25/solution2/src/main/resources/templates/index.html b/2022-05/spring-25/solution2/src/main/resources/templates/index.html new file mode 100644 index 00000000..f2d1d1ae --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/resources/templates/index.html @@ -0,0 +1,12 @@ + + + + + Главная страница + + +/public +
+/authenticated + + diff --git a/2022-05/spring-25/solution2/src/main/resources/templates/public.html b/2022-05/spring-25/solution2/src/main/resources/templates/public.html new file mode 100644 index 00000000..b9f93817 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/resources/templates/public.html @@ -0,0 +1,10 @@ + + + + + Доступен всем + + +Доступен всем + + diff --git a/2022-05/spring-25/solution2/src/main/resources/templates/success.html b/2022-05/spring-25/solution2/src/main/resources/templates/success.html new file mode 100644 index 00000000..58414c01 --- /dev/null +++ b/2022-05/spring-25/solution2/src/main/resources/templates/success.html @@ -0,0 +1,10 @@ + + + + + Вы успешно вошли ! + + +Вы успешно вошли ! + + diff --git a/2022-05/spring-25/solution3/pom.xml b/2022-05/spring-25/solution3/pom.xml new file mode 100644 index 00000000..1972999d --- /dev/null +++ b/2022-05/spring-25/solution3/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + solution3 + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.6.10 + + + + UTF-8 + UTF-8 + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.security + spring-security-test + ${spring-security.version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/Main.java b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..5406a277 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,12 @@ +package ru.otus.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class); + } +} diff --git a/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/controller/PagesController.java b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/controller/PagesController.java new file mode 100644 index 00000000..5d40adf9 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/controller/PagesController.java @@ -0,0 +1,43 @@ +package ru.otus.spring.controller; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class PagesController { + + @GetMapping("/") + public String indexPage() { + return "index"; + } + + @GetMapping("/public") + public String publicPage() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + Authentication authentication = securityContext.getAuthentication(); + UserDetails principal = (UserDetails) authentication.getPrincipal(); + System.out.println(principal.getUsername()); + return "public"; + } + + @GetMapping("/authenticated") + public String authenticatedPage() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + return "authenticated"; + } + + @GetMapping("/success") + public String successPage() { + return "success"; + } + + + @GetMapping("/error") + public String errorPage() { + return "error"; + } +} diff --git a/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/security/AnonimusUD.java b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/security/AnonimusUD.java new file mode 100644 index 00000000..b7a31238 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/security/AnonimusUD.java @@ -0,0 +1,43 @@ +package ru.otus.spring.security; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; + +public class AnonimusUD implements UserDetails { + @Override + public Collection getAuthorities() { + return null; + } + + @Override + public String getPassword() { + return null; + } + + @Override + public String getUsername() { + return "anonymous"; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } +} diff --git a/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/security/SecurityConfiguration.java new file mode 100644 index 00000000..6a8bce49 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/java/ru/otus/spring/security/SecurityConfiguration.java @@ -0,0 +1,49 @@ +package ru.otus.spring.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +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.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.password.NoOpPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@EnableWebSecurity +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Override + public void configure( WebSecurity web ) { + web.ignoring().antMatchers( "/" ); + } + + @Override + public void configure( HttpSecurity http ) throws Exception { + http.csrf().disable() + .authorizeRequests().antMatchers( "/public" ).anonymous() + .and() + .authorizeRequests().antMatchers( "/authenticated", "/success" ).authenticated() + + .and() + // Включает Form-based аутентификацию + .formLogin() + .and() + .anonymous() + .principal(new AnonimusUD()) + ; + } + + @SuppressWarnings("deprecation") + @Bean + public PasswordEncoder passwordEncoder() { + return NoOpPasswordEncoder.getInstance(); + } + + @Autowired + public void configure( AuthenticationManagerBuilder auth ) throws Exception { + auth.inMemoryAuthentication() + .withUser( "admin" ).password( "password" ).roles( "ADMIN" ); + } +} diff --git a/2022-05/spring-25/solution3/src/main/resources/application.yml b/2022-05/spring-25/solution3/src/main/resources/application.yml new file mode 100644 index 00000000..0151c503 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/resources/application.yml @@ -0,0 +1,4 @@ +logging: + level: + root: error + org.springframework: error \ No newline at end of file diff --git a/2022-05/spring-25/solution3/src/main/resources/templates/authenticated.html b/2022-05/spring-25/solution3/src/main/resources/templates/authenticated.html new file mode 100644 index 00000000..0d2043f0 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/resources/templates/authenticated.html @@ -0,0 +1,10 @@ + + + + + Только для авторизованных + + +Только для авторизованных + + diff --git a/2022-05/spring-25/solution3/src/main/resources/templates/error.html b/2022-05/spring-25/solution3/src/main/resources/templates/error.html new file mode 100644 index 00000000..ba4e50a2 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/resources/templates/error.html @@ -0,0 +1,10 @@ + + + + + Упс... + + +Что-то пошло не так. Печалька + + diff --git a/2022-05/spring-25/solution3/src/main/resources/templates/index.html b/2022-05/spring-25/solution3/src/main/resources/templates/index.html new file mode 100644 index 00000000..f2d1d1ae --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/resources/templates/index.html @@ -0,0 +1,12 @@ + + + + + Главная страница + + +/public +
+/authenticated + + diff --git a/2022-05/spring-25/solution3/src/main/resources/templates/public.html b/2022-05/spring-25/solution3/src/main/resources/templates/public.html new file mode 100644 index 00000000..b9f93817 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/resources/templates/public.html @@ -0,0 +1,10 @@ + + + + + Доступен всем + + +Доступен всем + + diff --git a/2022-05/spring-25/solution3/src/main/resources/templates/success.html b/2022-05/spring-25/solution3/src/main/resources/templates/success.html new file mode 100644 index 00000000..58414c01 --- /dev/null +++ b/2022-05/spring-25/solution3/src/main/resources/templates/success.html @@ -0,0 +1,10 @@ + + + + + Вы успешно вошли ! + + +Вы успешно вошли ! + + diff --git a/2022-05/spring-25/solution4/pom.xml b/2022-05/spring-25/solution4/pom.xml new file mode 100644 index 00000000..dfac5e39 --- /dev/null +++ b/2022-05/spring-25/solution4/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + ru.otus + solution4 + 1.0-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.6.10 + + + + UTF-8 + UTF-8 + 17 + + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-test + + + + org.springframework.security + spring-security-test + ${spring-security.version} + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/Main.java b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/Main.java new file mode 100644 index 00000000..5406a277 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/Main.java @@ -0,0 +1,12 @@ +package ru.otus.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class); + } +} diff --git a/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/controller/PagesController.java b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/controller/PagesController.java new file mode 100644 index 00000000..5d40adf9 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/controller/PagesController.java @@ -0,0 +1,43 @@ +package ru.otus.spring.controller; + +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class PagesController { + + @GetMapping("/") + public String indexPage() { + return "index"; + } + + @GetMapping("/public") + public String publicPage() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + Authentication authentication = securityContext.getAuthentication(); + UserDetails principal = (UserDetails) authentication.getPrincipal(); + System.out.println(principal.getUsername()); + return "public"; + } + + @GetMapping("/authenticated") + public String authenticatedPage() { + SecurityContext securityContext = SecurityContextHolder.getContext(); + return "authenticated"; + } + + @GetMapping("/success") + public String successPage() { + return "success"; + } + + + @GetMapping("/error") + public String errorPage() { + return "error"; + } +} diff --git a/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java new file mode 100644 index 00000000..b7a31238 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/security/AnonimusUD.java @@ -0,0 +1,43 @@ +package ru.otus.spring.security; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; + +public class AnonimusUD implements UserDetails { + @Override + public Collection getAuthorities() { + return null; + } + + @Override + public String getPassword() { + return null; + } + + @Override + public String getUsername() { + return "anonymous"; + } + + @Override + public boolean isAccountNonExpired() { + return true; + } + + @Override + public boolean isAccountNonLocked() { + return true; + } + + @Override + public boolean isCredentialsNonExpired() { + return true; + } + + @Override + public boolean isEnabled() { + return true; + } +} diff --git a/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java new file mode 100644 index 00000000..20b3aa6d --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/java/ru/otus/spring/security/SecurityConfiguration.java @@ -0,0 +1,51 @@ +package ru.otus.spring.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +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.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.password.NoOpPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + +@EnableWebSecurity +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Override + public void configure( WebSecurity web ) { + web.ignoring().antMatchers( "/" ); + } + + @Override + public void configure( HttpSecurity http ) throws Exception { + http.csrf().disable() + .sessionManagement().sessionCreationPolicy( SessionCreationPolicy.STATELESS ) + .and() + .authorizeRequests().antMatchers( "/public" ).anonymous() + .and() + .authorizeRequests().antMatchers( "/authenticated", "/success" ).authenticated() + + .and() + .formLogin() + .and() + .anonymous().principal(new AnonimusUD()) + .and() + .rememberMe().key("AnySecret").tokenValiditySeconds(60 * 30) + ; + } + + @SuppressWarnings("deprecation") + @Bean + public PasswordEncoder passwordEncoder() { + return NoOpPasswordEncoder.getInstance(); + } + + @Autowired + public void configure( AuthenticationManagerBuilder auth ) throws Exception { + auth.inMemoryAuthentication() + .withUser( "admin" ).password( "password" ).roles( "ADMIN" ); + } +} diff --git a/2022-05/spring-25/solution4/src/main/resources/application.yml b/2022-05/spring-25/solution4/src/main/resources/application.yml new file mode 100644 index 00000000..0151c503 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/resources/application.yml @@ -0,0 +1,4 @@ +logging: + level: + root: error + org.springframework: error \ No newline at end of file diff --git a/2022-05/spring-25/solution4/src/main/resources/templates/authenticated.html b/2022-05/spring-25/solution4/src/main/resources/templates/authenticated.html new file mode 100644 index 00000000..0d2043f0 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/resources/templates/authenticated.html @@ -0,0 +1,10 @@ + + + + + Только для авторизованных + + +Только для авторизованных + + diff --git a/2022-05/spring-25/solution4/src/main/resources/templates/error.html b/2022-05/spring-25/solution4/src/main/resources/templates/error.html new file mode 100644 index 00000000..ba4e50a2 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/resources/templates/error.html @@ -0,0 +1,10 @@ + + + + + Упс... + + +Что-то пошло не так. Печалька + + diff --git a/2022-05/spring-25/solution4/src/main/resources/templates/index.html b/2022-05/spring-25/solution4/src/main/resources/templates/index.html new file mode 100644 index 00000000..f2d1d1ae --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/resources/templates/index.html @@ -0,0 +1,12 @@ + + + + + Главная страница + + +/public +
+/authenticated + + diff --git a/2022-05/spring-25/solution4/src/main/resources/templates/public.html b/2022-05/spring-25/solution4/src/main/resources/templates/public.html new file mode 100644 index 00000000..b9f93817 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/resources/templates/public.html @@ -0,0 +1,10 @@ + + + + + Доступен всем + + +Доступен всем + + diff --git a/2022-05/spring-25/solution4/src/main/resources/templates/success.html b/2022-05/spring-25/solution4/src/main/resources/templates/success.html new file mode 100644 index 00000000..58414c01 --- /dev/null +++ b/2022-05/spring-25/solution4/src/main/resources/templates/success.html @@ -0,0 +1,10 @@ + + + + + Вы успешно вошли ! + + +Вы успешно вошли ! + +