专题导航
一、Flowable介绍及部署
二、SpringBoot集成Flowable UI
三、Flowable UI跳过权限验证
四、Flowable UI整合前后分离
一、未登录访问需要验证的接口
直接访问一些需要登录验证的接口:
二、权限校验分析及处理
因为之前搭建项目时,可以看到是权限校验是基于spring security的,故直接去需要security的配置文件:
进入可以看到以下代码:
其已经将/app/**进行了权限校验的配置
故,创建一个与其路径一样、名称一样的文件,将其短路、并且通过所有请求
再次测试
同时后台报错:
java.lang.NullPointerException: null
at org.flowable.ui.idm.rest.app.AccountResource.getAccount(AccountResource.java:69) ~[flowable-ui-idm-rest-6.4.2.jar:6.4.2]
......
进入报错地点:
继续进入:
断点查看:
可见是flowable自己封装的securityUtils通过spring security获取当前用户信息时,并未成功获取,返回值为null,因此调用user的信息时,抛出空指针异常。
对securityUtils进行重写,返回默认配置的用户
public static User getCurrentUserObject() {
if (assumeUser != null) {
return assumeUser;
}
RemoteUser user = new RemoteUser();
user.setId("admin");
user.setDisplayName("admin");
user.setFirstName("admin");
user.setLastName("admin");
user.setEmail("admin@test.com");
//赋予权限
List<String> pris = new ArrayList<>();
pris.add(DefaultPrivileges.ACCESS_MODELER);
pris.add(DefaultPrivileges.ACCESS_IDM);
pris.add(DefaultPrivileges.ACCESS_ADMIN);
pris.add(DefaultPrivileges.ACCESS_TASK);
pris.add(DefaultPrivileges.ACCESS_REST_API);
user.setPrivileges(pris);
assumeUser(user);
return user;
}
public static FlowableAppUser getCurrentFlowableAppUser() {
if (flowableAppUser==null){
RemoteUser user = new RemoteUser();
user.setId("admin");
user.setDisplayName("admin");
user.setFirstName("admin");
user.setLastName("admin");
user.setEmail("admin@test.com");
//赋予权限
List<String> pris = new ArrayList<>();
pris.add(DefaultPrivileges.ACCESS_MODELER);
pris.add(DefaultPrivileges.ACCESS_IDM);
pris.add(DefaultPrivileges.ACCESS_ADMIN);
pris.add(DefaultPrivileges.ACCESS_TASK);
pris.add(DefaultPrivileges.ACCESS_REST_API);
user.setPrivileges(pris);
List<GrantedAuthority> list = new ArrayList<>();
list.add(new SimpleGrantedAuthority(DefaultPrivileges.ACCESS_MODELER));
list.add(new SimpleGrantedAuthority(DefaultPrivileges.ACCESS_IDM));
list.add(new SimpleGrantedAuthority(DefaultPrivileges.ACCESS_ADMIN));
list.add(new SimpleGrantedAuthority(DefaultPrivileges.ACCESS_TASK));
list.add(new SimpleGrantedAuthority(DefaultPrivileges.ACCESS_REST_API));
FlowableAppUser flowableUser = new FlowableAppUser(user,user.getId(),list);
flowableAppUser = flowableUser;
}
return flowableAppUser;
}
三、再次测试
代码处断点查看:
操作结果:
注意:admin、task等需要用户及组数据的操作,还是会报错(因为获取不到用户),可以考虑集成自己的用户表信息或者在idm中登录(数据表中存在的用户)