燕鹏
4 年之前
共有 5 個文件被更改,包括 229 次插入 和 2 次删除
@ -1,13 +1,98 @@ |
|||
package com.example.demo; |
|||
|
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.activiti.api.runtime.shared.query.Page; |
|||
import org.activiti.api.runtime.shared.query.Pageable; |
|||
import org.activiti.api.task.model.Task; |
|||
import org.activiti.api.task.model.builders.TaskPayloadBuilder; |
|||
import org.activiti.api.task.runtime.TaskRuntime; |
|||
import org.activiti.api.task.runtime.events.TaskAssignedEvent; |
|||
import org.activiti.api.task.runtime.events.TaskCompletedEvent; |
|||
import org.activiti.api.task.runtime.events.listener.TaskRuntimeEventListener; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.boot.CommandLineRunner; |
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
import org.springframework.context.annotation.Bean; |
|||
|
|||
@Slf4j |
|||
@SpringBootApplication |
|||
public class DemoApplication { |
|||
public class DemoApplication implements CommandLineRunner { |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(DemoApplication.class, args); |
|||
} |
|||
|
|||
@Autowired |
|||
private TaskRuntime taskRuntime; |
|||
|
|||
@Autowired |
|||
private SecurityUtil securityUtil; |
|||
|
|||
@Override |
|||
public void run(String... args) { |
|||
|
|||
// Using Security Util to simulate a logged in user
|
|||
securityUtil.logInAs("salaboy"); |
|||
|
|||
// Let's create a Group Task (not assigned, all the members of the group can claim it)
|
|||
// Here 'salaboy' is the owner of the created task
|
|||
log.info("> Creating a Group Task for 'activitiTeam'"); |
|||
taskRuntime.create(TaskPayloadBuilder.create() |
|||
.withName("First Team Task") |
|||
.withDescription("This is something really important") |
|||
.withCandidateGroup("activitiTeam") |
|||
.withPriority(10) |
|||
.build()); |
|||
|
|||
// Let's log in as 'other' user that doesn't belong to the 'activitiTeam' group
|
|||
securityUtil.logInAs("other"); |
|||
|
|||
// Let's get all my tasks (as 'other' user)
|
|||
log.info("> Getting all the tasks"); |
|||
Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 10)); |
|||
|
|||
// No tasks are returned
|
|||
log.info("> Other cannot see the task: " + tasks.getTotalItems()); |
|||
|
|||
|
|||
// Now let's switch to a user that belongs to the activitiTeam
|
|||
securityUtil.logInAs("erdemedeiros"); |
|||
|
|||
// Let's get 'erdemedeiros' tasks
|
|||
log.info("> Getting all the tasks"); |
|||
tasks = taskRuntime.tasks(Pageable.of(0, 10)); |
|||
|
|||
// 'erdemedeiros' can see and claim the task
|
|||
log.info("> erdemedeiros can see the task: " + tasks.getTotalItems()); |
|||
|
|||
|
|||
String availableTaskId = tasks.getContent().get(0).getId(); |
|||
|
|||
// Let's claim the task, after the claim, nobody else can see the task and 'erdemedeiros' becomes the assignee
|
|||
log.info("> Claiming the task"); |
|||
taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(availableTaskId).build()); |
|||
|
|||
|
|||
// Let's complete the task
|
|||
log.info("> Completing the task"); |
|||
taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(availableTaskId).build()); |
|||
|
|||
|
|||
} |
|||
|
|||
@Bean |
|||
public TaskRuntimeEventListener<TaskAssignedEvent> taskAssignedListener() { |
|||
return taskAssigned -> log.info(">>> Task Assigned: '" |
|||
+ taskAssigned.getEntity().getName() + |
|||
"' We can send a notification to the assginee: " + taskAssigned.getEntity().getAssignee()); |
|||
} |
|||
|
|||
@Bean |
|||
public TaskRuntimeEventListener<TaskCompletedEvent> taskCompletedListener() { |
|||
return taskCompleted -> log.info(">>> Task Completed: '" |
|||
+ taskCompleted.getEntity().getName() + |
|||
"' We can send a notification to the owner: " + taskCompleted.getEntity().getOwner()); |
|||
} |
|||
|
|||
} |
|||
|
@ -0,0 +1,58 @@ |
|||
package com.example.demo; |
|||
|
|||
import lombok.extern.slf4j.Slf4j; |
|||
import org.springframework.context.annotation.Bean; |
|||
import org.springframework.context.annotation.Configuration; |
|||
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; |
|||
|
|||
/** |
|||
* @author yanpeng |
|||
* @version 1.0 |
|||
* @desc TODO |
|||
* @company 北京中经网软件有限公司 |
|||
* @date 2020/10/29 13:54 |
|||
*/ |
|||
@Slf4j |
|||
@Configuration |
|||
public class DemoApplicationConfiguration { |
|||
|
|||
@Bean |
|||
public 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<String> 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(s -> new SimpleGrantedAuthority(s)).collect(Collectors.toList()))); |
|||
} |
|||
|
|||
|
|||
return inMemoryUserDetailsManager; |
|||
} |
|||
|
|||
|
|||
@Bean |
|||
public PasswordEncoder passwordEncoder() { |
|||
return new BCryptPasswordEncoder(); |
|||
} |
|||
|
|||
} |
@ -0,0 +1,77 @@ |
|||
package com.example.demo; |
|||
|
|||
import org.slf4j.Logger; |
|||
import org.slf4j.LoggerFactory; |
|||
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; |
|||
|
|||
|
|||
/** |
|||
* @author yanpeng |
|||
* @version 1.0 |
|||
* @desc TODO |
|||
* @company 北京中经网软件有限公司 |
|||
* @date 2020/10/29 13:48 |
|||
*/ |
|||
@Component |
|||
public class SecurityUtil { |
|||
|
|||
private Logger logger = LoggerFactory.getLogger(SecurityUtil.class); |
|||
|
|||
@Autowired |
|||
private 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"); |
|||
} |
|||
logger.info("> Logged in as: " + username); |
|||
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); |
|||
} |
|||
} |
Loading…
Reference in new issue