From bdc59432a6719a11f516119b2bfce6ab2a1b4948 Mon Sep 17 00:00:00 2001 From: pivovarit Date: Thu, 9 Feb 2017 09:58:12 +0100 Subject: [PATCH 01/11] Configure Travis --- .travis.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..a58410dc56 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: java + +install: mvn clean install + +jdk: + - oraclejdk8 \ No newline at end of file From b18f2a58c885091587597b65512627316b7bef8d Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 9 Feb 2017 11:53:06 +0200 Subject: [PATCH 02/11] minor formatting cleanup --- .../controller/GenericEntityController.java | 4 +--- .../SpringBootApplicationIntegrationTest.java | 17 +++++------------ .../ProductInfoRepositoryIntegrationTest.java | 6 +++--- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/spring-boot/src/main/java/org/baeldung/controller/GenericEntityController.java b/spring-boot/src/main/java/org/baeldung/controller/GenericEntityController.java index 7d6293056a..7d1ad7d899 100644 --- a/spring-boot/src/main/java/org/baeldung/controller/GenericEntityController.java +++ b/spring-boot/src/main/java/org/baeldung/controller/GenericEntityController.java @@ -54,8 +54,6 @@ public class GenericEntityController { @GetMapping("/entity/findbyversion") public ResponseEntity findByVersion(@Version String version) { - return version != null - ? new ResponseEntity(entityList.stream().findFirst().get(), HttpStatus.OK) - : new ResponseEntity(HttpStatus.NOT_FOUND); + return version != null ? new ResponseEntity(entityList.stream().findFirst().get(), HttpStatus.OK) : new ResponseEntity(HttpStatus.NOT_FOUND); } } diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java index 3499952ab4..87c59a4662 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java @@ -45,29 +45,22 @@ public class SpringBootApplicationIntegrationTest { public void givenRequestHasBeenMade_whenMeetsFindByDateOfGivenConditions_thenCorrect() throws Exception { MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); - mockMvc.perform(MockMvcRequestBuilders.get("/entity/findbydate/{date}", "2011-12-03T10:15:30")) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(contentType)) - .andExpect(jsonPath("$.id", equalTo(1))); + mockMvc.perform(MockMvcRequestBuilders.get("/entity/findbydate/{date}", "2011-12-03T10:15:30")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(contentType)) + .andExpect(jsonPath("$.id", equalTo(1))); } @Test public void givenRequestHasBeenMade_whenMeetsFindByModeOfGivenConditions_thenCorrect() throws Exception { MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); - mockMvc.perform(MockMvcRequestBuilders.get("/entity/findbymode/{mode}", Modes.ALPHA.name())) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(contentType)) - .andExpect(jsonPath("$.id", equalTo(1))); + mockMvc.perform(MockMvcRequestBuilders.get("/entity/findbymode/{mode}", Modes.ALPHA.name())).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(contentType)).andExpect(jsonPath("$.id", equalTo(1))); } @Test public void givenRequestHasBeenMade_whenMeetsFindByVersionOfGivenConditions_thenCorrect() throws Exception { MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); - mockMvc.perform(MockMvcRequestBuilders.get("/entity/findbyversion").header("Version", "1.0.0")) - .andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(contentType)) - .andExpect(jsonPath("$.id", equalTo(1))); + mockMvc.perform(MockMvcRequestBuilders.get("/entity/findbyversion").header("Version", "1.0.0")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(contentType)) + .andExpect(jsonPath("$.id", equalTo(1))); } } diff --git a/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java b/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java index 8fe3e96940..05badc74b4 100644 --- a/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java +++ b/spring-data-dynamodb/src/test/java/com/baeldung/spring/data/dynamodb/repository/ProductInfoRepositoryIntegrationTest.java @@ -44,8 +44,8 @@ public class ProductInfoRepositoryIntegrationTest { private static final String EXPECTED_PRICE = "50"; @Before - @Ignore //TODO Remove Ignore annotations when running locally with Local DynamoDB instance - public void setup() throws Exception { + @Ignore // TODO Remove Ignore annotations when running locally with Local DynamoDB instance + public void setup() throws Exception { try { dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB); @@ -64,7 +64,7 @@ public class ProductInfoRepositoryIntegrationTest { } @Test - @Ignore //TODO Remove Ignore annotations when running locally with Local DynamoDB instance + @Ignore // TODO Remove Ignore annotations when running locally with Local DynamoDB instance public void givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound() { ProductInfo productInfo = new ProductInfo(EXPECTED_COST, EXPECTED_PRICE); From bfb364769cf1c86da4053683185361e2fad15a4b Mon Sep 17 00:00:00 2001 From: lor6 Date: Thu, 9 Feb 2017 11:56:34 +0200 Subject: [PATCH 03/11] move multiple login project (#1140) --- spring-security-custom-permission/pom.xml | 12 +- .../main/java/org/baeldung/Application.java | 2 +- .../MultipleLoginApplication.java | 22 ++++ .../multiplelogin/MultipleLoginMvcConfig.java | 45 +++++++ .../MultipleLoginSecurityConfig.java | 122 ++++++++++++++++++ .../multiplelogin/UsersController.java | 38 ++++++ .../src/main/resources/templates/403.html | 10 ++ .../main/resources/templates/adminPage.html | 13 ++ .../src/main/resources/templates/login.html | 27 ++++ .../main/resources/templates/loginAdmin.html | 31 +++++ .../main/resources/templates/loginUser.html | 30 +++++ .../resources/templates/protectedLinks.html | 13 ++ .../main/resources/templates/userPage.html | 12 ++ 13 files changed, 375 insertions(+), 2 deletions(-) create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/UsersController.java create mode 100644 spring-security-custom-permission/src/main/resources/templates/403.html create mode 100644 spring-security-custom-permission/src/main/resources/templates/adminPage.html create mode 100644 spring-security-custom-permission/src/main/resources/templates/login.html create mode 100644 spring-security-custom-permission/src/main/resources/templates/loginAdmin.html create mode 100644 spring-security-custom-permission/src/main/resources/templates/loginUser.html create mode 100644 spring-security-custom-permission/src/main/resources/templates/protectedLinks.html create mode 100644 spring-security-custom-permission/src/main/resources/templates/userPage.html diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index 39dec2805f..a2925189e4 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -128,6 +128,12 @@ spring-security-taglibs ${spring-security-taglibs.version} + + + org.springframework.security + spring-security-core + ${spring-security-core.version} + javax.servlet.jsp.jstl @@ -280,11 +286,15 @@ org.baeldung.Application - UTF-8 + + + UTF-8 1.8 10.13.1.1 1.1.2 4.2.0.RELEASE + 4.2.0.RELEASE + 1.2 2.4.0 1.6.1 diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/Application.java b/spring-security-custom-permission/src/main/java/org/baeldung/Application.java index 71d503e678..072a6ca4fe 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/Application.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/Application.java @@ -9,7 +9,7 @@ import org.springframework.context.annotation.FilterType; @Configuration @EnableAutoConfiguration -@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*")) +@ComponentScan(excludeFilters = {@ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multiplelogin.*")}) public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java new file mode 100644 index 0000000000..23fda0547f --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginApplication.java @@ -0,0 +1,22 @@ +package org.baeldung.multiplelogin; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.context.web.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.builder.SpringApplicationBuilder; + +@SpringBootApplication +@ComponentScan("org.baeldung.multiplelogin") +public class MultipleLoginApplication extends SpringBootServletInitializer { + public static void main(String[] args) { + SpringApplication.run(MultipleLoginApplication.class, args); + } + + @Override + protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { + return application.sources(MultipleLoginApplication.class); + } +} \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java new file mode 100644 index 0000000000..ec76be1909 --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginMvcConfig.java @@ -0,0 +1,45 @@ +package org.baeldung.multiplelogin; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.springframework.web.servlet.view.InternalResourceViewResolver; +import org.springframework.web.servlet.view.JstlView; +import org.springframework.context.annotation.ComponentScan; + +@EnableWebMvc +@Configuration +@ComponentScan("org.baeldung.controller") +public class MultipleLoginMvcConfig extends WebMvcConfigurerAdapter { + + public MultipleLoginMvcConfig() { + super(); + } + + // API + + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); + + registry.addViewController("/anonymous.html"); + + registry.addViewController("/login.html"); + registry.addViewController("/homepage.html"); + registry.addViewController("/console.html"); + } + + @Bean + public ViewResolver viewResolver() { + final InternalResourceViewResolver bean = new InternalResourceViewResolver(); + + bean.setViewClass(JstlView.class); + bean.setPrefix("/WEB-INF/view/"); + bean.setSuffix(".jsp"); + + return bean; + } +} \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java new file mode 100644 index 0000000000..d7dbf17723 --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/MultipleLoginSecurityConfig.java @@ -0,0 +1,122 @@ +package org.baeldung.multiplelogin; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.Order; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.TestingAuthenticationProvider; +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.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; + +@Configuration +@EnableWebSecurity +public class MultipleLoginSecurityConfig { + + @Bean + public UserDetailsService userDetailsService() throws Exception { + InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); + manager.createUser(User.withUsername("user") + .password("userPass") + .roles("USER") + .build()); + manager.createUser(User.withUsername("admin") + .password("adminPass") + .roles("ADMIN") + .build()); + return manager; + } + + @Configuration + @Order(1) + public static class App1ConfigurationAdapter extends WebSecurityConfigurerAdapter { + + public App1ConfigurationAdapter() { + super(); + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication() + .withUser("admin") + .password("admin") + .roles("ADMIN"); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.antMatcher("/admin*") + .authorizeRequests() + .anyRequest() + .hasRole("ADMIN") + // log in + .and() + .formLogin() + .loginPage("/loginAdmin") + .loginProcessingUrl("/admin_login") + .failureUrl("/loginAdmin?error=loginError") + .defaultSuccessUrl("/adminPage") + // logout + .and() + .logout() + .logoutUrl("/admin_logout") + .logoutSuccessUrl("/protectedLinks") + .deleteCookies("JSESSIONID") + .and() + .exceptionHandling() + .accessDeniedPage("/403") + .and() + .csrf() + .disable(); + } + } + + @Configuration + @Order(2) + public static class App2ConfigurationAdapter extends WebSecurityConfigurerAdapter { + + public App2ConfigurationAdapter() { + super(); + } + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication() + .withUser("user") + .password("user") + .roles("USER"); + } + + protected void configure(HttpSecurity http) throws Exception { + http.antMatcher("/user*") + .authorizeRequests() + .anyRequest() + .hasRole("USER") + // log in + .and() + .formLogin() + .loginPage("/loginUser") + .loginProcessingUrl("/user_login") + .failureUrl("/loginUser?error=loginError") + .defaultSuccessUrl("/userPage") + // logout + .and() + .logout() + .logoutUrl("/user_logout") + .logoutSuccessUrl("/protectedLinks") + .deleteCookies("JSESSIONID") + .and() + .exceptionHandling() + .accessDeniedPage("/403") + .and() + .csrf() + .disable(); + } + } + +} diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/UsersController.java b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/UsersController.java new file mode 100644 index 0000000000..0672a760af --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/multiplelogin/UsersController.java @@ -0,0 +1,38 @@ +package org.baeldung.multiplelogin; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class UsersController { + + @RequestMapping("/protectedLinks") + public String getAnonymousPage() { + return "protectedLinks"; + } + + @RequestMapping("/userPage") + public String getUserPage() { + return "userPage"; + } + + @RequestMapping("/adminPage") + public String getAdminPage() { + return "adminPage"; + } + + @RequestMapping("/loginAdmin") + public String getAdminLoginPage() { + return "loginAdmin"; + } + + @RequestMapping("/loginUser") + public String getUserLoginPage() { + return "loginUser"; + } + + @RequestMapping("/403") + public String getAccessDeniedPage() { + return "403"; + } +} diff --git a/spring-security-custom-permission/src/main/resources/templates/403.html b/spring-security-custom-permission/src/main/resources/templates/403.html new file mode 100644 index 0000000000..20550768cf --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/403.html @@ -0,0 +1,10 @@ + + + + + + + +You do not have permission to view this page. + + \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/resources/templates/adminPage.html b/spring-security-custom-permission/src/main/resources/templates/adminPage.html new file mode 100644 index 0000000000..13aff9b15a --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/adminPage.html @@ -0,0 +1,13 @@ + + + + +Insert title here + + +Welcome admin! Logout + +

+Back to links + + \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/resources/templates/login.html b/spring-security-custom-permission/src/main/resources/templates/login.html new file mode 100644 index 0000000000..dd6bd04767 --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/login.html @@ -0,0 +1,27 @@ + + + + +

Login

+ +
+ + + + + + + + + + + + + + +
User:
Password:
+ +
+ + + \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/resources/templates/loginAdmin.html b/spring-security-custom-permission/src/main/resources/templates/loginAdmin.html new file mode 100644 index 0000000000..43d0e73233 --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/loginAdmin.html @@ -0,0 +1,31 @@ + + + + +Insert title here + + + +

Admin login page

+
+ + + + + + + + + + + + + +
User:
Password:
+ +
+ +

Login failed!

+ + + \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/resources/templates/loginUser.html b/spring-security-custom-permission/src/main/resources/templates/loginUser.html new file mode 100644 index 0000000000..bf4ddd48bc --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/loginUser.html @@ -0,0 +1,30 @@ + + + + +Login + + + +

User login page

+ +
+ + + + + + + + + + + + +
User:
Password:
+ +
+

Login failed!

+ + + \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/resources/templates/protectedLinks.html b/spring-security-custom-permission/src/main/resources/templates/protectedLinks.html new file mode 100644 index 0000000000..1877464fe5 --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/protectedLinks.html @@ -0,0 +1,13 @@ + + + + +Insert title here + + + +User page +
+Admin page + + \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/resources/templates/userPage.html b/spring-security-custom-permission/src/main/resources/templates/userPage.html new file mode 100644 index 0000000000..894a225871 --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/templates/userPage.html @@ -0,0 +1,12 @@ + + + + +Insert title here + + +Welcome user! Logout +

+Back to links + + \ No newline at end of file From 3a1505ad29bc864fa9487eebbbe8c97f7f1b9848 Mon Sep 17 00:00:00 2001 From: lor6 Date: Thu, 9 Feb 2017 11:56:53 +0200 Subject: [PATCH 04/11] clean project of security config (#1141) --- spring-mvc-forms/pom.xml | 17 --- .../configuration/SecurityConfig.java | 122 ------------------ .../configuration/WebInitializer.java | 5 +- .../controller/UsersController.java | 38 ------ .../src/main/webapp/WEB-INF/views/403.jsp | 12 -- .../main/webapp/WEB-INF/views/adminPage.jsp | 16 --- .../main/webapp/WEB-INF/views/loginAdmin.jsp | 38 ------ .../main/webapp/WEB-INF/views/loginUser.jsp | 37 ------ .../webapp/WEB-INF/views/protectedLinks.jsp | 16 --- .../main/webapp/WEB-INF/views/userPage.jsp | 15 --- 10 files changed, 1 insertion(+), 315 deletions(-) delete mode 100644 spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/SecurityConfig.java delete mode 100644 spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/UsersController.java delete mode 100644 spring-mvc-forms/src/main/webapp/WEB-INF/views/403.jsp delete mode 100644 spring-mvc-forms/src/main/webapp/WEB-INF/views/adminPage.jsp delete mode 100644 spring-mvc-forms/src/main/webapp/WEB-INF/views/loginAdmin.jsp delete mode 100644 spring-mvc-forms/src/main/webapp/WEB-INF/views/loginUser.jsp delete mode 100644 spring-mvc-forms/src/main/webapp/WEB-INF/views/protectedLinks.jsp delete mode 100644 spring-mvc-forms/src/main/webapp/WEB-INF/views/userPage.jsp diff --git a/spring-mvc-forms/pom.xml b/spring-mvc-forms/pom.xml index f17d695c35..35ed00c0e9 100644 --- a/spring-mvc-forms/pom.xml +++ b/spring-mvc-forms/pom.xml @@ -47,22 +47,6 @@ ${fileupload.version}
- - org.springframework.security - spring-security-web - ${org.springframework.security.version} - - - org.springframework.security - spring-security-config - ${org.springframework.security.version} - - - org.springframework.security - spring-security-taglibs - ${org.springframework.security.version} - - @@ -115,7 +99,6 @@ 5.3.3.Final enter-location-of-server 1.3.2 - 4.2.1.RELEASE diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/SecurityConfig.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/SecurityConfig.java deleted file mode 100644 index e35844138d..0000000000 --- a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/SecurityConfig.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.baeldung.springmvcforms.configuration; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.annotation.Order; -import org.springframework.security.authentication.AuthenticationProvider; -import org.springframework.security.authentication.TestingAuthenticationProvider; -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.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.provisioning.InMemoryUserDetailsManager; - -@Configuration -@EnableWebSecurity -public class SecurityConfig { - - @Bean - public UserDetailsService userDetailsService() throws Exception { - InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); - manager.createUser(User.withUsername("user") - .password("userPass") - .roles("USER") - .build()); - manager.createUser(User.withUsername("admin") - .password("adminPass") - .roles("ADMIN") - .build()); - return manager; - } - - @Configuration - @Order(1) - public static class App1ConfigurationAdapter extends WebSecurityConfigurerAdapter { - - public App1ConfigurationAdapter() { - super(); - } - - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication() - .withUser("admin") - .password("admin") - .roles("ADMIN"); - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - http.antMatcher("/admin*") - .authorizeRequests() - .anyRequest() - .hasRole("ADMIN") - // log in - .and() - .formLogin() - .loginPage("/loginAdmin") - .loginProcessingUrl("/admin_login") - .failureUrl("/loginAdmin?error=loginError") - .defaultSuccessUrl("/adminPage") - // logout - .and() - .logout() - .logoutUrl("/admin_logout") - .logoutSuccessUrl("/protectedLinks") - .deleteCookies("JSESSIONID") - .and() - .exceptionHandling() - .accessDeniedPage("/403") - .and() - .csrf() - .disable(); - } - } - - @Configuration - @Order(2) - public static class App2ConfigurationAdapter extends WebSecurityConfigurerAdapter { - - public App2ConfigurationAdapter() { - super(); - } - - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication() - .withUser("user") - .password("user") - .roles("USER"); - } - - protected void configure(HttpSecurity http) throws Exception { - http.antMatcher("/user*") - .authorizeRequests() - .anyRequest() - .hasRole("USER") - // log in - .and() - .formLogin() - .loginPage("/loginUser") - .loginProcessingUrl("/user_login") - .failureUrl("/loginUser?error=loginError") - .defaultSuccessUrl("/userPage") - // logout - .and() - .logout() - .logoutUrl("/user_logout") - .logoutSuccessUrl("/protectedLinks") - .deleteCookies("JSESSIONID") - .and() - .exceptionHandling() - .accessDeniedPage("/403") - .and() - .csrf() - .disable(); - } - } - -} diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java index fdc155e101..2eb669da2c 100644 --- a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java +++ b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/configuration/WebInitializer.java @@ -3,7 +3,6 @@ package com.baeldung.springmvcforms.configuration; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.filter.DelegatingFilterProxy; import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.ServletContext; @@ -25,9 +24,7 @@ public class WebInitializer implements WebApplicationInitializer { servlet.setLoadOnStartup(1); servlet.addMapping("/"); - - container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain")) - .addMappingForUrlPatterns(null, false, "/*"); + } // @Override // public void onStartup(ServletContext container) { diff --git a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/UsersController.java b/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/UsersController.java deleted file mode 100644 index c0858d427f..0000000000 --- a/spring-mvc-forms/src/main/java/com/baeldung/springmvcforms/controller/UsersController.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.springmvcforms.controller; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -public class UsersController { - - @RequestMapping("/protectedLinks") - public String getAnonymousPage() { - return "protectedLinks"; - } - - @RequestMapping("/userPage") - public String getUserPage() { - return "userPage"; - } - - @RequestMapping("/adminPage") - public String getAdminPage() { - return "adminPage"; - } - - @RequestMapping("/loginAdmin") - public String getAdminLoginPage() { - return "loginAdmin"; - } - - @RequestMapping("/loginUser") - public String getUserLoginPage() { - return "loginUser"; - } - - @RequestMapping("/403") - public String getAccessDeniedPage() { - return "403"; - } -} diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/403.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/403.jsp deleted file mode 100644 index e665793e10..0000000000 --- a/spring-mvc-forms/src/main/webapp/WEB-INF/views/403.jsp +++ /dev/null @@ -1,12 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> - - - - - - - -Your do not have permission to view this page. - - \ No newline at end of file diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/adminPage.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/adminPage.jsp deleted file mode 100644 index a210b690b0..0000000000 --- a/spring-mvc-forms/src/main/webapp/WEB-INF/views/adminPage.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - - - - -Insert title here - - -Welcome admin! Logout - -

-Back to links - - \ No newline at end of file diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/loginAdmin.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/loginAdmin.jsp deleted file mode 100644 index a6b2ee7914..0000000000 --- a/spring-mvc-forms/src/main/webapp/WEB-INF/views/loginAdmin.jsp +++ /dev/null @@ -1,38 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> - - - - -Insert title here - - - -

Admin login page

-
- - - - - - - - - - - - - -
User:
Password:
- -
- - <% - if (request.getParameter("error") != null) { - out.println("Login failed!"); - } - %> - - - \ No newline at end of file diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/loginUser.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/loginUser.jsp deleted file mode 100644 index e65c11edaf..0000000000 --- a/spring-mvc-forms/src/main/webapp/WEB-INF/views/loginUser.jsp +++ /dev/null @@ -1,37 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> - - - - -Login - - - -

User login page

- -
- - - - - - - - - - - - -
User:
Password:
- -
- <% - if (request.getParameter("error") != null) { - out.println("Login failed!"); - } - %> - - - \ No newline at end of file diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/protectedLinks.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/protectedLinks.jsp deleted file mode 100644 index b8453903ba..0000000000 --- a/spring-mvc-forms/src/main/webapp/WEB-INF/views/protectedLinks.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - - - - -Insert title here - - - -">User page -
-">Admin page - - \ No newline at end of file diff --git a/spring-mvc-forms/src/main/webapp/WEB-INF/views/userPage.jsp b/spring-mvc-forms/src/main/webapp/WEB-INF/views/userPage.jsp deleted file mode 100644 index 4c1bd47502..0000000000 --- a/spring-mvc-forms/src/main/webapp/WEB-INF/views/userPage.jsp +++ /dev/null @@ -1,15 +0,0 @@ -<%@ page language="java" contentType="text/html; charset=ISO-8859-1" - pageEncoding="ISO-8859-1"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - - - - -Insert title here - - -Welcome user! Logout -

-Back to links - - \ No newline at end of file From 22241a412645b474c3668407eb58087840fe3afa Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 9 Feb 2017 12:15:55 +0200 Subject: [PATCH 05/11] testing fix --- ...est.java => JavaEEAppIntegrationTest.java} | 61 +++++++++---------- 1 file changed, 29 insertions(+), 32 deletions(-) rename spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/{JavaEEAppTest.java => JavaEEAppIntegrationTest.java} (79%) diff --git a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/JavaEEAppTest.java b/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/JavaEEAppIntegrationTest.java similarity index 79% rename from spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/JavaEEAppTest.java rename to spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/JavaEEAppIntegrationTest.java index 00705be307..95106d2dc8 100644 --- a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/JavaEEAppTest.java +++ b/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/JavaEEAppIntegrationTest.java @@ -1,17 +1,12 @@ package com.baeldung.annotation.servletcomponentscan; -import com.baeldung.annotation.servletcomponentscan.javaee.AttrListener; -import com.baeldung.annotation.servletcomponentscan.javaee.EchoServlet; -import com.baeldung.annotation.servletcomponentscan.javaee.HelloFilter; -import com.baeldung.annotation.servletcomponentscan.javaee.HelloServlet; -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.container.test.api.RunAsClient; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.spec.WebArchive; -import org.junit.Test; -import org.junit.runner.RunWith; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; import javax.inject.Inject; import javax.servlet.FilterRegistration; @@ -22,24 +17,31 @@ import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; -import static org.junit.Assert.*; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.container.test.api.RunAsClient; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.baeldung.annotation.servletcomponentscan.javaee.AttrListener; +import com.baeldung.annotation.servletcomponentscan.javaee.EchoServlet; +import com.baeldung.annotation.servletcomponentscan.javaee.HelloFilter; +import com.baeldung.annotation.servletcomponentscan.javaee.HelloServlet; @RunWith(Arquillian.class) -public class JavaEEAppTest { +public class JavaEEAppIntegrationTest { @Deployment public static WebArchive createDeployment() { - return ShrinkWrap - .create(WebArchive.class) - .addClass(JavaEEApp.class) - .addClasses(AttrListener.class, HelloFilter.class, HelloServlet.class, EchoServlet.class); + return ShrinkWrap.create(WebArchive.class).addClass(JavaEEApp.class).addClasses(AttrListener.class, HelloFilter.class, HelloServlet.class, EchoServlet.class); } - @Inject private ServletContext servletContext; + @Inject + private ServletContext servletContext; @Test public void givenServletContextListener_whenAccessSpecialAttrs_thenFound() throws MalformedURLException { @@ -54,21 +56,18 @@ public class JavaEEAppTest { FilterRegistration filterRegistration = servletContext.getFilterRegistration("hello filter"); assertNotNull(filterRegistration); - assertTrue(filterRegistration - .getServletNameMappings() - .contains("echo servlet")); + assertTrue(filterRegistration.getServletNameMappings().contains("echo servlet")); } - @ArquillianResource private URL base; + @ArquillianResource + private URL base; @Test @RunAsClient public void givenFilterAndServlet_whenGetHello_thenRespondFilteringHello() throws MalformedURLException { Client client = ClientBuilder.newClient(); WebTarget target = client.target(URI.create(new URL(base, "hello").toExternalForm())); - Response response = target - .request() - .get(); + Response response = target.request().get(); assertEquals("filtering hello", response.readEntity(String.class)); } @@ -78,9 +77,7 @@ public class JavaEEAppTest { public void givenFilterAndServlet_whenPostEcho_thenEchoFiltered() throws MalformedURLException { Client client = ClientBuilder.newClient(); WebTarget target = client.target(URI.create(new URL(base, "echo").toExternalForm())); - Response response = target - .request() - .post(Entity.entity("echo", MediaType.TEXT_PLAIN_TYPE)); + Response response = target.request().post(Entity.entity("echo", MediaType.TEXT_PLAIN_TYPE)); assertEquals("filtering echo", response.readEntity(String.class)); } From 9fc0aed6a49267bf73fb9fd0df3aa2c38a6c1765 Mon Sep 17 00:00:00 2001 From: pivovarit Date: Thu, 9 Feb 2017 11:36:18 +0100 Subject: [PATCH 06/11] Update .travis.yml --- .travis.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a58410dc56..b1f83ea1f5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,4 +3,10 @@ language: java install: mvn clean install jdk: - - oraclejdk8 \ No newline at end of file + - oraclejdk8 + +sudo: false +addons: + apt: + packages: + - oracle-java8-installer \ No newline at end of file From 6cd3bc37c8ef3e722aed5db593960345e4c4f12c Mon Sep 17 00:00:00 2001 From: pivovarit Date: Thu, 9 Feb 2017 11:45:00 +0100 Subject: [PATCH 07/11] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b1f83ea1f5..620067a080 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: java -install: mvn clean install +install: mvn -q clean install jdk: - oraclejdk8 From f54c9d8ead9632f9328f203f09cee3ece35b401c Mon Sep 17 00:00:00 2001 From: pivovarit Date: Thu, 9 Feb 2017 11:48:45 +0100 Subject: [PATCH 08/11] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 620067a080..54fc85a292 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: java -install: mvn -q clean install +install: travis_wait 30 mvn -q clean install jdk: - oraclejdk8 From 158fd42be1b4791be3cbbb81f7f4b0668dabd79f Mon Sep 17 00:00:00 2001 From: pivovarit Date: Thu, 9 Feb 2017 12:15:41 +0100 Subject: [PATCH 09/11] Update .travis.yml --- .travis.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 54fc85a292..5e115f8808 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,4 +9,9 @@ sudo: false addons: apt: packages: - - oracle-java8-installer \ No newline at end of file + - oracle-java8-installer + +cache: + directories: + - .autoconf + - $HOME/.m2 \ No newline at end of file From 8c88e79fed9c6fc722902d8d52af7340fa707f37 Mon Sep 17 00:00:00 2001 From: pivovarit Date: Thu, 9 Feb 2017 13:01:44 +0100 Subject: [PATCH 10/11] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5e115f8808..256180a240 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: java -install: travis_wait 30 mvn -q clean install +install: travis_wait 40 mvn -q clean install jdk: - oraclejdk8 From 58da4867bcf6df90beaf2fa0a4c32d328796e52f Mon Sep 17 00:00:00 2001 From: Tian Baoqiang Date: Thu, 9 Feb 2017 20:26:49 +0800 Subject: [PATCH 11/11] rename #BAEL-100 tests to follow the standard naming convention (#1145) --- ....java => SpringBootWithServletComponentIntegrationTest.java} | 2 +- ...va => SpringBootWithoutServletComponentIntegrationTest.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/{SpringBootWithServletComponentTest.java => SpringBootWithServletComponentIntegrationTest.java} (97%) rename spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/{SpringBootWithoutServletComponentTest.java => SpringBootWithoutServletComponentIntegrationTest.java} (96%) diff --git a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentTest.java b/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java similarity index 97% rename from spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentTest.java rename to spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java index 524a4df480..81ac3c9841 100644 --- a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentTest.java +++ b/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithServletComponentIntegrationTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.*; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = SpringBootAnnotatedApp.class) @AutoConfigureMockMvc @TestPropertySource(properties = { "security.basic.enabled=false", "server.tomcat.additional-tld-skip-patterns=tomee-*.jar,tomcat-*.jar,openejb-*.jar,cxf-*.jar,activemq-*.jar" }) -public class SpringBootWithServletComponentTest { +public class SpringBootWithServletComponentIntegrationTest { @Autowired private ServletContext servletContext; diff --git a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentTest.java b/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java similarity index 96% rename from spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentTest.java rename to spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java index 811323826b..b2dea25864 100644 --- a/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentTest.java +++ b/spring-boot/src/test/java/com/baeldung/annotation/servletcomponentscan/SpringBootWithoutServletComponentIntegrationTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.*; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = SpringBootPlainApp.class) @AutoConfigureMockMvc @TestPropertySource(properties = { "security.basic.enabled=false", "server.tomcat.additional-tld-skip-patterns=tomee-*.jar,tomcat-*.jar,openejb-*.jar,cxf-*.jar,activemq-*.jar" }) -public class SpringBootWithoutServletComponentTest { +public class SpringBootWithoutServletComponentIntegrationTest { @Autowired private ServletContext servletContext;