Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f7ab212

Browse files
committed
✨ activiti 测试
1 parent dd49987 commit f7ab212

File tree

5 files changed

+241
-0
lines changed

5 files changed

+241
-0
lines changed

‎spring-boot-demo-activiti/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@
5050
<groupId>mysql</groupId>
5151
<artifactId>mysql-connector-java</artifactId>
5252
</dependency>
53+
54+
<dependency>
55+
<groupId>org.projectlombok</groupId>
56+
<artifactId>lombok</artifactId>
57+
<optional>true</optional>
58+
</dependency>
5359
</dependencies>
5460

5561
<build>
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.xkcoding.activiti.config;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.context.annotation.Bean;
5+
import org.springframework.context.annotation.Configuration;
6+
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
7+
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
8+
import org.springframework.security.core.authority.SimpleGrantedAuthority;
9+
import org.springframework.security.core.userdetails.User;
10+
import org.springframework.security.core.userdetails.UserDetailsService;
11+
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
12+
import org.springframework.security.crypto.password.PasswordEncoder;
13+
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
14+
15+
import java.util.Arrays;
16+
import java.util.List;
17+
import java.util.stream.Collectors;
18+
19+
/**
20+
* <p>
21+
* 安全配置类
22+
* </p>
23+
*
24+
* @package: com.xkcoding.activiti.config
25+
* @description: 安全配置类
26+
* @author: yangkai.shen
27+
* @date: Created in 2019年07月01日 18:40
28+
* @copyright: Copyright (c) 2019
29+
* @version: V1.0
30+
* @modified: yangkai.shen
31+
*/
32+
@Slf4j
33+
@Configuration
34+
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
35+
36+
@Override
37+
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
38+
auth.userDetailsService(userDetailsService());
39+
}
40+
41+
@Bean
42+
protected UserDetailsService myUserDetailsService() {
43+
InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
44+
45+
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"}};
46+
47+
for (String[] user : usersGroupsAndRoles) {
48+
List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));
49+
log.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]");
50+
inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]), authoritiesStrings
51+
.stream()
52+
.map(SimpleGrantedAuthority::new)
53+
.collect(Collectors.toList())));
54+
}
55+
56+
57+
return inMemoryUserDetailsManager;
58+
}
59+
60+
@Bean
61+
public PasswordEncoder passwordEncoder() {
62+
return new BCryptPasswordEncoder();
63+
}
64+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.xkcoding.activiti.util;
2+
3+
import lombok.RequiredArgsConstructor;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.security.core.Authentication;
6+
import org.springframework.security.core.GrantedAuthority;
7+
import org.springframework.security.core.context.SecurityContextHolder;
8+
import org.springframework.security.core.context.SecurityContextImpl;
9+
import org.springframework.security.core.userdetails.UserDetails;
10+
import org.springframework.security.core.userdetails.UserDetailsService;
11+
import org.springframework.stereotype.Component;
12+
13+
import java.util.Collection;
14+
15+
/**
16+
* <p>
17+
* 认证工具
18+
* </p>
19+
*
20+
* @package: com.xkcoding.activiti.util
21+
* @description: 认证工具
22+
* @author: yangkai.shen
23+
* @date: Created in 2019年07月01日 18:38
24+
* @copyright: Copyright (c) 2019
25+
* @version: V1.0
26+
* @modified: yangkai.shen
27+
*/
28+
@Component
29+
@RequiredArgsConstructor(onConstructor_ = @Autowired)
30+
public class SecurityUtil {
31+
32+
private final UserDetailsService userDetailsService;
33+
34+
public void logInAs(String username) {
35+
36+
UserDetails user = userDetailsService.loadUserByUsername(username);
37+
if (user == null) {
38+
throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");
39+
}
40+
41+
SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {
42+
@Override
43+
public Collection<? extends GrantedAuthority> getAuthorities() {
44+
return user.getAuthorities();
45+
}
46+
47+
@Override
48+
public Object getCredentials() {
49+
return user.getPassword();
50+
}
51+
52+
@Override
53+
public Object getDetails() {
54+
return user;
55+
}
56+
57+
@Override
58+
public Object getPrincipal() {
59+
return user;
60+
}
61+
62+
@Override
63+
public boolean isAuthenticated() {
64+
return true;
65+
}
66+
67+
@Override
68+
public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
69+
70+
}
71+
72+
@Override
73+
public String getName() {
74+
return user.getUsername();
75+
}
76+
}));
77+
org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);
78+
}
79+
}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2+
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="http://www.activiti.org/test" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:yaoqiang="http://bpmn.sourceforge.net" exporter="Yaoqiang BPMN Editor" exporterVersion="5.3" expressionLanguage="http://www.w3.org/1999/XPath" id="m1544167269809" name="" targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://bpmn.sourceforge.net/schemas/BPMN20.xsd">
3+
<process id="myProcess_1" isClosed="false" isExecutable="true" processType="None">
4+
<extensionElements>
5+
<yaoqiang:description/>
6+
<yaoqiang:pageFormat height="841.8897637795276" imageableHeight="831.8897637795276" imageableWidth="588.1102362204724" imageableX="5.0" imageableY="5.0" orientation="0" width="598.1102362204724"/>
7+
<yaoqiang:page background="#FFFFFF" horizontalCount="1" verticalCount="1"/>
8+
</extensionElements>
9+
<startEvent id="_2" isInterrupting="true" name="StartEvent" parallelMultiple="false">
10+
<outgoing>_6</outgoing>
11+
<outputSet/>
12+
</startEvent>
13+
<userTask activiti:candidateGroups="activitiTeam" activiti:exclusive="true" completionQuantity="1" id="_3" implementation="##unspecified" isForCompensation="false" name="first" startQuantity="1">
14+
<incoming>_6</incoming>
15+
<outgoing>_7</outgoing>
16+
</userTask>
17+
<userTask activiti:candidateGroups="activitiTeam" activiti:exclusive="true" completionQuantity="1" id="_4" implementation="##unspecified" isForCompensation="false" name="second" startQuantity="1">
18+
<incoming>_7</incoming>
19+
<outgoing>_8</outgoing>
20+
</userTask>
21+
<endEvent id="_5" name="EndEvent">
22+
<incoming>_8</incoming>
23+
<inputSet/>
24+
</endEvent>
25+
<sequenceFlow id="_6" sourceRef="_2" targetRef="_3"/>
26+
<sequenceFlow id="_7" sourceRef="_3" targetRef="_4"/>
27+
<sequenceFlow id="_8" sourceRef="_4" targetRef="_5"/>
28+
</process>
29+
<bpmndi:BPMNDiagram id="Yaoqiang_Diagram-myProcess_1" name="New Diagram" resolution="96.0">
30+
<bpmndi:BPMNPlane bpmnElement="myProcess_1">
31+
<bpmndi:BPMNShape bpmnElement="_2" id="Yaoqiang-_2">
32+
<omgdc:Bounds height="32.0" width="32.0" x="65.0" y="80.0"/>
33+
<bpmndi:BPMNLabel>
34+
<omgdc:Bounds height="18.96" width="60.0" x="51.0" y="120.52"/>
35+
</bpmndi:BPMNLabel>
36+
</bpmndi:BPMNShape>
37+
<bpmndi:BPMNShape bpmnElement="_3" id="Yaoqiang-_3">
38+
<omgdc:Bounds height="55.0" width="85.0" x="170.0" y="115.0"/>
39+
<bpmndi:BPMNLabel>
40+
<omgdc:Bounds height="18.96" width="28.0" x="198.5" y="135.02"/>
41+
</bpmndi:BPMNLabel>
42+
</bpmndi:BPMNShape>
43+
<bpmndi:BPMNShape bpmnElement="_4" id="Yaoqiang-_4">
44+
<omgdc:Bounds height="55.0" width="85.0" x="310.0" y="155.0"/>
45+
<bpmndi:BPMNLabel>
46+
<omgdc:Bounds height="18.96" width="45.0" x="330.0" y="175.02"/>
47+
</bpmndi:BPMNLabel>
48+
</bpmndi:BPMNShape>
49+
<bpmndi:BPMNShape bpmnElement="_5" id="Yaoqiang-_5">
50+
<omgdc:Bounds height="32.0" width="32.0" x="505.0" y="220.0"/>
51+
<bpmndi:BPMNLabel>
52+
<omgdc:Bounds height="18.96" width="55.0" x="493.5" y="260.52"/>
53+
</bpmndi:BPMNLabel>
54+
</bpmndi:BPMNShape>
55+
<bpmndi:BPMNEdge bpmnElement="_8" id="Yaoqiang-_8">
56+
<omgdi:waypoint x="395.0" y="182.5"/>
57+
<omgdi:waypoint x="505.0" y="236.0"/>
58+
<bpmndi:BPMNLabel>
59+
<omgdc:Bounds height="18.96" width="6.0" x="447.0" y="199.77"/>
60+
</bpmndi:BPMNLabel>
61+
</bpmndi:BPMNEdge>
62+
<bpmndi:BPMNEdge bpmnElement="_7" id="Yaoqiang-_7">
63+
<omgdi:waypoint x="255.0" y="142.5"/>
64+
<omgdi:waypoint x="310.0" y="182.5"/>
65+
<bpmndi:BPMNLabel>
66+
<omgdc:Bounds height="18.96" width="6.0" x="279.5" y="153.02"/>
67+
</bpmndi:BPMNLabel>
68+
</bpmndi:BPMNEdge>
69+
<bpmndi:BPMNEdge bpmnElement="_6" id="Yaoqiang-_6">
70+
<omgdi:waypoint x="97.0" y="96.0"/>
71+
<omgdi:waypoint x="170.0" y="142.5"/>
72+
<bpmndi:BPMNLabel>
73+
<omgdc:Bounds height="18.96" width="6.0" x="130.5" y="109.77"/>
74+
</bpmndi:BPMNLabel>
75+
</bpmndi:BPMNEdge>
76+
</bpmndi:BPMNPlane>
77+
</bpmndi:BPMNDiagram>
78+
</definitions>

‎spring-boot-demo-activiti/src/test/java/com/xkcoding/activiti/SpringBootDemoActivitiApplicationTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,30 @@
11
package com.xkcoding.activiti;
22

3+
import com.xkcoding.activiti.util.SecurityUtil;
4+
import org.activiti.api.process.model.ProcessDefinition;
5+
import org.activiti.api.process.runtime.ProcessRuntime;
6+
import org.activiti.api.runtime.shared.query.Page;
7+
import org.activiti.api.runtime.shared.query.Pageable;
38
import org.junit.Test;
49
import org.junit.runner.RunWith;
10+
import org.springframework.beans.factory.annotation.Autowired;
511
import org.springframework.boot.test.context.SpringBootTest;
612
import org.springframework.test.context.junit4.SpringRunner;
713

814
@RunWith(SpringRunner.class)
915
@SpringBootTest
1016
public class SpringBootDemoActivitiApplicationTests {
1117

18+
@Autowired
19+
private ProcessRuntime processRuntime;
20+
@Autowired
21+
private SecurityUtil securityUtil;
22+
1223
@Test
1324
public void contextLoads() {
25+
securityUtil.logInAs("salaboy");
26+
Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));
27+
processDefinitionPage.getContent().forEach(System.out::println);
1428
}
1529

1630
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /