From f7ab2121bc14c6184e4d90cc0f145fcd9f66df72 Mon Sep 17 00:00:00 2001 From: "Yangkai.Shen" <237497819@qq.com> Date: Mon, 1 Jul 2019 18:59:26 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20activiti=20=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring-boot-demo-activiti/pom.xml | 6 ++ .../config/SecurityConfiguration.java | 64 +++++++++++++++ .../xkcoding/activiti/util/SecurityUtil.java | 79 +++++++++++++++++++ .../src/main/resources/processes/team01.bpmn | 78 ++++++++++++++++++ ...pringBootDemoActivitiApplicationTests.java | 14 ++++ 5 files changed, 241 insertions(+) create mode 100644 spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java create mode 100755 spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java create mode 100755 spring-boot-demo-activiti/src/main/resources/processes/team01.bpmn diff --git a/spring-boot-demo-activiti/pom.xml b/spring-boot-demo-activiti/pom.xml index 8062c3b..7c547e9 100644 --- a/spring-boot-demo-activiti/pom.xml +++ b/spring-boot-demo-activiti/pom.xml @@ -50,6 +50,12 @@ mysql mysql-connector-java + + + org.projectlombok + lombok + true + diff --git a/spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java b/spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java new file mode 100644 index 0000000..3d9799f --- /dev/null +++ b/spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/config/SecurityConfiguration.java @@ -0,0 +1,64 @@ +package com.xkcoding.activiti.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + *

+ * 安全配置类 + *

+ * + * @package: com.xkcoding.activiti.config + * @description: 安全配置类 + * @author: yangkai.shen + * @date: Created in 2019-07-01 18:40 + * @copyright: Copyright (c) 2019 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Slf4j +@Configuration +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.userDetailsService(userDetailsService()); + } + + @Bean + protected UserDetailsService myUserDetailsService() { + InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager(); + + String[][] usersGroupsAndRoles = {{"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"other", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"}, {"admin", "password", "ROLE_ACTIVITI_ADMIN"}}; + + for (String[] user : usersGroupsAndRoles) { + List authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length)); + log.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]"); + inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]), authoritiesStrings + .stream() + .map(SimpleGrantedAuthority::new) + .collect(Collectors.toList()))); + } + + + return inMemoryUserDetailsManager; + } + + @Bean + public PasswordEncoder passwordEncoder() { + return new BCryptPasswordEncoder(); + } +} diff --git a/spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java b/spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java new file mode 100755 index 0000000..aa7897b --- /dev/null +++ b/spring-boot-demo-activiti/src/main/java/com/xkcoding/activiti/util/SecurityUtil.java @@ -0,0 +1,79 @@ +package com.xkcoding.activiti.util; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.context.SecurityContextImpl; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.stereotype.Component; + +import java.util.Collection; + +/** + *

+ * 认证工具 + *

+ * + * @package: com.xkcoding.activiti.util + * @description: 认证工具 + * @author: yangkai.shen + * @date: Created in 2019-07-01 18:38 + * @copyright: Copyright (c) 2019 + * @version: V1.0 + * @modified: yangkai.shen + */ +@Component +@RequiredArgsConstructor(onConstructor_ = @Autowired) +public class SecurityUtil { + + private final UserDetailsService userDetailsService; + + public void logInAs(String username) { + + UserDetails user = userDetailsService.loadUserByUsername(username); + if (user == null) { + throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user"); + } + + SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() { + @Override + public Collection getAuthorities() { + return user.getAuthorities(); + } + + @Override + public Object getCredentials() { + return user.getPassword(); + } + + @Override + public Object getDetails() { + return user; + } + + @Override + public Object getPrincipal() { + return user; + } + + @Override + public boolean isAuthenticated() { + return true; + } + + @Override + public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException { + + } + + @Override + public String getName() { + return user.getUsername(); + } + })); + org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username); + } +} diff --git a/spring-boot-demo-activiti/src/main/resources/processes/team01.bpmn b/spring-boot-demo-activiti/src/main/resources/processes/team01.bpmn new file mode 100755 index 0000000..5958d61 --- /dev/null +++ b/spring-boot-demo-activiti/src/main/resources/processes/team01.bpmn @@ -0,0 +1,78 @@ + + + + + + + + + + _6 + + + + _6 + _7 + + + _7 + _8 + + + _8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-boot-demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java b/spring-boot-demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java index 133339c..3f4caaf 100644 --- a/spring-boot-demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java +++ b/spring-boot-demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java @@ -1,7 +1,13 @@ package com.xkcoding.activiti; +import com.xkcoding.activiti.util.SecurityUtil; +import org.activiti.api.process.model.ProcessDefinition; +import org.activiti.api.process.runtime.ProcessRuntime; +import org.activiti.api.runtime.shared.query.Page; +import org.activiti.api.runtime.shared.query.Pageable; import org.junit.Test; import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @@ -9,8 +15,16 @@ import org.springframework.test.context.junit4.SpringRunner; @SpringBootTest public class SpringBootDemoActivitiApplicationTests { + @Autowired + private ProcessRuntime processRuntime; + @Autowired + private SecurityUtil securityUtil; + @Test public void contextLoads() { + securityUtil.logInAs("salaboy"); + Page processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10)); + processDefinitionPage.getContent().forEach(System.out::println); } }