API结构
新特性ProcessRuntime
-
Java代码实现
private static final Logger LOGGER = LoggerFactory.getLogger(Part8_ProcessRuntime.class); @Resource private ProcessRuntime processRuntime; @Resource private SecurityUtil securityUtil; /* 获取流程实例 */ @Test public void getProcessInstance() { securityUtil.logInAs("bajie"); Page<ProcessInstance> processInstancePage = processRuntime.processInstances(Pageable.of(0, 100)); int totalItems = processInstancePage.getTotalItems(); LOGGER.info("启动流程实例 = {}", totalItems); List<ProcessInstance> content = processInstancePage.getContent(); for (ProcessInstance processInstance : content) { LOGGER.info("------------------------"); LOGGER.info("id = {}", processInstance.getId()); LOGGER.info("Name = {}", processInstance.getName()); LOGGER.info("StartDate = {}", processInstance.getStartDate()); LOGGER.info("Status = {}", processInstance.getStatus()); LOGGER.info("ProcessDefinitionId = {}", processInstance.getProcessDefinitionId()); LOGGER.info("ProcessDefinitionKey = {}", processInstance.getProcessDefinitionKey()); } } /* 启动流程实例 */ @Test public void startProcessInstance() { securityUtil.logInAs("bajie"); ProcessInstance processInstance = processRuntime.start( ProcessPayloadBuilder.start() .withProcessDefinitionKey("defkey") .withName("第一个流程实例名称") .withBusinessKey("自定义key") .build() ); } 复制代码
-
运行结果
taskList.size()= 1
task.getId()= ae4bae6c-7a36-11eb-8698-80a589c981f4
task.getName()= 八戒的pRuntime任务
task.getAssignee()= bajie
复制代码
/*
删除流程实例
*/
@Test
public void delProcessInstance() {
processRuntime.delete(
ProcessPayloadBuilder
.delete()
.withProcessInstanceId("ae3f7967-7a36-11eb-8698-80a589c981f4")
.build()
);
}
复制代码
/*
挂起流程实例
*/
@Test
public void suspendProcessInstance() {
securityUtil.logInAs("baijie");
processRuntime.suspend(
ProcessPayloadBuilder
.suspend()
.withProcessInstanceId("ae3f7967-7a36-11eb-8698-80a589c981f4")
.build()
);
}
/*
重启流程实例
*/
@Test
public void resumeProcessInstance() {
securityUtil.logInAs("bajie");
processRuntime
.resume(ProcessPayloadBuilder
.resume()
.withProcessInstanceId("ae3f7967-7a36-11eb-8698-80a589c981f4")
.build()
);
}
/*
流程实例参数
*/
@Test
public void getVariables() {
securityUtil.logInAs("bajie");
List<VariableInstance> variables = processRuntime.variables(ProcessPayloadBuilder
.variables()
.withProcessInstanceId("ae3f7967-7a36-11eb-8698-80a589c981f4")
.build()
);
for (VariableInstance variable : variables) {
LOGGER.info("---------------");
LOGGER.info("getName = {}",variable.getName());
LOGGER.info("getTaskId = {}",variable.getTaskId());
LOGGER.info("getProcessInstanceId = {}",variable.getProcessInstanceId());
}
}
复制代码
新特性TaskRuntime
-
java代码
private static final Logger LOGGER = LoggerFactory.getLogger(Part9_TaskRuntime.class); @Resource private TaskRuntime taskRuntime; @Resource private SecurityUtil securityUtil; @Test public void getTask() { securityUtil.logInAs("bajie"); Page<Task> tasks = taskRuntime.tasks(Pageable.of(0, 100)); int totalItems = tasks.getTotalItems(); LOGGER.info("总的数据为 = {}", totalItems); List<Task> content = tasks.getContent(); for (Task task : content) { LOGGER.info("task.id = {}", task.getId()); LOGGER.info("task.getName() = {}", task.getName()); LOGGER.info("task.getStatus() = {}", task.getStatus()); LOGGER.info("task.getCreatedDate() = {}", task.getCreatedDate()); } } @Test public void completeTask() { securityUtil.logInAs("bajie"); Task task = taskRuntime.task(""); if (task.getAssignee() == null) { LOGGER.info("Assignee: 待拾取任务"); taskRuntime.claim(TaskPayloadBuilder .claim() .withTaskId(task.getId()) .build()); } else { taskRuntime.complete(TaskPayloadBuilder .complete() .withTaskId(task.getId()) .build()); LOGGER.info("Assignee: = {}", task.getAssignee()); } } 复制代码
SpringSecurity用户登录
功能
- 认证
- 鉴权/授权
用户的三种来源
- application.properties 配置用户
- 代码中配置内存用户
- 从数据库中加载用户
本课程知识点
-
内存登录改为数据库数据登录
-
SpringSecurity 配置文件详解
-
登录响应处理方案
内存登录改为数据库数据登录
模拟数据库校验
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
String passwrod = passwordEncoder().encode("111");
return new User(
userName
, passwrod
, AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ACTIVITI_USER")
);
}
复制代码
前端登录校验
@Override
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
String passwrod = passwordEncoder().encode("111");
UserInfoBean userInfoBean = userInfoBeanMapper.selectByUsername(userName);
if (StringUtils.isEmpty(userInfoBean)) {
throw new UsernameNotFoundException("请先注册在登陆");
}
return userInfoBean;
/* return new User(
userName
, passwrod
, AuthorityUtils.commaSeparatedStringToAuthorityList("ROLE_ACTIVITI_USER")
);*/
}
复制代码
-
数据库用户对应的实体类
@Component public class UserInfoBean implements UserDetails { private Integer id; private String address; private String name; private String username; private String roles; private String password; /* 对角色进行赋值 */ @Override public Collection<? extends GrantedAuthority> getAuthorities() { return Arrays.stream(roles.split(",")).map( s -> new SimpleGrantedAuthority(s)) .collect(Collectors.toList() ); } public String getAddress() { return address; } @Override public String getPassword() { return password; } @Override public String getUsername() { return username; } @Override public boolean isAccountNonExpired() { return true; } @Override public boolean isAccountNonLocked() { return true; } @Override public boolean isCredentialsNonExpired() { return true; } @Override public boolean isEnabled() { return true; } } 复制代码
SpringSecurity配置
- 内存登录改为从数据库取值登录
- SpringSecurity配置详解
- 登录响应处理方案
SpringSecurity配置登录接口/拦截器编写
@Configuration
public class ActivitiSecurityConfig extends WebSecurityConfigurerAdapter {
@Resource
private LoginSuccessHandler loginSuccessHandler;
@Resource
private LoginFailureHandler loginFailureHandler;
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity.formLogin()
// 登陆方法
.loginPage("/login")
.loginProcessingUrl("/login")
.successHandler(loginSuccessHandler)
.failureHandler(loginFailureHandler)
.and()
.authorizeRequests()
.anyRequest().permitAll()
.and()
.logout().permitAll()
.and()
.csrf().disable()
.headers().frameOptions().disable();
}
}
复制代码
SpringSecurity登录成功后定制返回信息
@Component("loginSuccessHandler")
public class LoginSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, FilterChain chain, Authentication authentication) throws IOException, ServletException {
}
@Override
public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
httpServletResponse.setContentType("applicationn/json;charset=UTF-8");
httpServletResponse.getWriter().write("登陆成功!"+authentication.getPrincipal());
}
}
复制代码
SpringSecurity登录响应
登录失败提示
public class ActivitiSecurityController {
@RequestMapping("/login")
@ResponseStatus(code = HttpStatus.UNAUTHORIZED)
public String requireAuthentication(HttpServletRequest httpServletRequest
, HttpServletResponse httpServletResponse) {
return "请先登录,请使用login.html或发起POST登陆请求";
}
}
复制代码
- 控制层的编写
public class ActivitiSecurityController {
@RequestMapping("/login")
@ResponseStatus(code = HttpStatus.UNAUTHORIZED)
public String requireAuthentication(HttpServletRequest httpServletRequest
, HttpServletResponse httpServletResponse) {
return "请先登录,请使用login.html或发起POST登陆请求";
}
}
复制代码
BPMN-JS整合
- BPMN-JS下载地址: github.com/bpmn-io/bpm…
- 项目的根目录下的 :bpmnjs初始化.zip 文件加入resource/resource中
目录结构如下
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END