From 3fa78ebd6740122371b79552c6cedf109b7a212f Mon Sep 17 00:00:00 2001 From: Miguel Angel Martin Date: Wed, 29 Aug 2018 17:33:25 +0200 Subject: [PATCH] TSK-624 logout bug --- rest/taskana-rest-spring-example/pom.xml | 4 ++ .../rest/controllers/LoginController.java | 24 ++++++++++ .../rest/controllers/ViewController.java | 9 ++-- .../rest/security/WebSecurityConfig.java | 44 +++++++++---------- .../{customlogin.html => login.html} | 0 .../components/nav-bar/nav-bar.component.html | 2 +- .../components/nav-bar/nav-bar.component.scss | 1 - .../components/nav-bar/nav-bar.component.ts | 2 + .../startup-service/startup.service.ts | 6 ++- .../taskana-engine/taskana-engine.service.ts | 8 +++- 10 files changed, 69 insertions(+), 31 deletions(-) create mode 100644 rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/LoginController.java rename rest/taskana-rest-spring-example/src/main/resources/templates/{customlogin.html => login.html} (100%) diff --git a/rest/taskana-rest-spring-example/pom.xml b/rest/taskana-rest-spring-example/pom.xml index 516a064ab..25273d0d4 100644 --- a/rest/taskana-rest-spring-example/pom.xml +++ b/rest/taskana-rest-spring-example/pom.xml @@ -116,6 +116,10 @@ spring-restdocs-mockmvc test + + org.springframework.boot + spring-boot-starter-thymeleaf + diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/LoginController.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/LoginController.java new file mode 100644 index 000000000..ae4d2ac5b --- /dev/null +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/LoginController.java @@ -0,0 +1,24 @@ +package pro.taskana.rest.controllers; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; + +import org.springframework.core.Ordered; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Controller +public class LoginController implements WebMvcConfigurer { + + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/login").setViewName("login"); + registry.setOrder(Ordered.HIGHEST_PRECEDENCE); + } + + + +} \ No newline at end of file diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/ViewController.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/ViewController.java index 0a20ae941..afe86d5d7 100644 --- a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/ViewController.java +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/controllers/ViewController.java @@ -5,8 +5,9 @@ import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ViewController { - @RequestMapping({ "/administration*/**", "/workplace*/**", "/monitor*/**" , "/no-role*/**"}) - public String index() { - return "forward:/index.html"; - } + + @RequestMapping({"/administration*/**", "/workplace*/**", "/monitor*/**", "/no-role*/**"}) + public String index() { + return "forward:/index.html"; + } } diff --git a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java index 5708eaaf4..1e3af7b63 100644 --- a/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java +++ b/rest/taskana-rest-spring-example/src/main/java/pro/taskana/rest/security/WebSecurityConfig.java @@ -12,16 +12,14 @@ import org.springframework.security.authentication.jaas.JaasAuthenticationProvid import org.springframework.security.authentication.jaas.JaasNameCallbackHandler; import org.springframework.security.authentication.jaas.JaasPasswordCallbackHandler; 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.web.jaasapi.JaasApiIntegrationFilter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import org.springframework.web.servlet.config.annotation.CorsRegistry; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @@ -39,40 +37,29 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() + .httpBasic() + .and() .authenticationProvider(jaasAuthProvider()) .authorizeRequests() - .antMatchers(HttpMethod.GET, "/docs/**") - .permitAll() - .antMatchers(HttpMethod.GET, "/**") - .authenticated() - .and() - .httpBasic() + .antMatchers(HttpMethod.GET, "/docs/**").permitAll() .and() .addFilter(new JaasApiIntegrationFilter()); if (devMode) { http.headers().frameOptions().sameOrigin() .and().authorizeRequests().antMatchers("/h2-console/**").permitAll(); - return; + } else { + AddLoginPageConfiguration(http); } - http - .authorizeRequests() - .anyRequest().authenticated() - .and() - .formLogin() - .permitAll() - .and() - .logout() - .permitAll(); } @Bean public JaasAuthenticationProvider jaasAuthProvider() { JaasAuthenticationProvider authenticationProvider = new JaasAuthenticationProvider(); - authenticationProvider.setAuthorityGranters(new AuthorityGranter[]{new SampleRoleGranter()}); - authenticationProvider.setCallbackHandlers(new JaasAuthenticationCallbackHandler[]{ - new JaasNameCallbackHandler(), new JaasPasswordCallbackHandler()}); + authenticationProvider.setAuthorityGranters(new AuthorityGranter[] {new SampleRoleGranter()}); + authenticationProvider.setCallbackHandlers(new JaasAuthenticationCallbackHandler[] { + new JaasNameCallbackHandler(), new JaasPasswordCallbackHandler()}); authenticationProvider.setLoginContextName("taskana"); authenticationProvider.setLoginConfig(new ClassPathResource("pss_jaas.config")); return authenticationProvider; @@ -103,4 +90,17 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { bean.setOrder(0); return bean; } + + private void AddLoginPageConfiguration(HttpSecurity http) throws Exception { + http + .authorizeRequests() + .anyRequest().fullyAuthenticated() + .and() + .formLogin().loginPage("/login").failureUrl("/login?error") + .permitAll() + .and() + .logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")) + .logoutSuccessUrl("/login").deleteCookies("JSESSIONID") + .invalidateHttpSession(true); + } } diff --git a/rest/taskana-rest-spring-example/src/main/resources/templates/customlogin.html b/rest/taskana-rest-spring-example/src/main/resources/templates/login.html similarity index 100% rename from rest/taskana-rest-spring-example/src/main/resources/templates/customlogin.html rename to rest/taskana-rest-spring-example/src/main/resources/templates/login.html diff --git a/web/src/app/components/nav-bar/nav-bar.component.html b/web/src/app/components/nav-bar/nav-bar.component.html index 4d1718cb9..06011112b 100644 --- a/web/src/app/components/nav-bar/nav-bar.component.html +++ b/web/src/app/components/nav-bar/nav-bar.component.html @@ -36,7 +36,7 @@