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 extends GrantedAuthority> 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);
}
}