提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
springboot2 + activiti7 整合
一、pom文件
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>7.1.0.M6</version>
</dependency>
二、yml文件配置
#activity配置信息
activiti:
history-level: full
db-history-used: true
#自动部署关闭
check-process-definitions: false
deployment-mode: never-fail #禁止SpringAutoDeployment
三、启动之前的准备
默认直接启动会报springsecurity找不到UserDetails实现类
1.新建 CustomUserDetail
代码如下:
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
@Data
public class CustomUserDetail implements UserDetails {
//手机号
private String username;
private String password;
//id 这是我的框架自定义信息,按实际情况解决
private Long userId;
private Long companyId;
private Long deptId;
private Long postId;
private String tenant;
private Collection<? extends GrantedAuthority> authorities;
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return this.authorities;
}
@Override
public String getPassword() {
return this.password;
}
@Override
public String getUsername() {
return this.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;
}
}
2.新建 CustomUserDetailService
代码如下(示例):
import cn.hutool.core.util.ObjectUtil;
import com.uchiha.nova.core.tool.support.NovaUser;
import com.uchiha.nova.core.tool.util.AuthUtil;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
@Component
public class CustomUserDetailService implements UserDetailsService {
@Override
public CustomUserDetail loadUserByUsername(String username) throws UsernameNotFoundException {
// 框架方法不要深究,主要是为了返回 CustomUserDetail
NovaUser novaUser = AuthUtil.getUser();
CustomUserDetail customUser = new CustomUserDetail();
customUser.setUserId(novaUser.getUserId());
customUser.setUsername(novaUser.getUserName());
customUser.setTenant(novaUser.getTenantId());
customUser.setPostId(1L);
customUser.setCompanyId(ObjectUtil.isNotEmpty(novaUser.getCompanyId())?Long.valueOf(novaUser.getCompanyId()):1L);
customUser.setDeptId(ObjectUtil.isNotEmpty(novaUser.getDeptId())?Long.valueOf(novaUser.getDeptId()):1L);
customUser.setPostId(ObjectUtil.isNotEmpty(novaUser.getPostId())?Long.valueOf(novaUser.getPostId()):1L);
customUser.setAuthorities(AuthorityUtils.commaSeparatedStringToAuthorityList(novaUser.getRoleName()));
return customUser;
}
}
SpringSecurity的常规用法
总结
activiti7默认集成了SpringSecurity,坏处是显而易见的,那就是在微服务情况下,我们的很多服务是不集成SpringSecurity,而且activiti所在的springboot也不会是和统一认证的springboot放在一起,违背了微服务划分的原则。这里我们在后续的地方讲解是如何利用框架的这段代码
NovaUser novaUser = AuthUtil.getUser();
解决的springsecurity权限问题