/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.flowable.ui.modeler.application;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.flowable.ui.common.model.RemoteToken;
import org.flowable.ui.common.model.RemoteUser;
import org.flowable.ui.common.security.CookieConstants;
import org.flowable.ui.common.security.DefaultPrivileges;
import org.flowable.ui.common.service.idm.RemoteIdmService;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.stubbing.Answer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.web.client.TestRestTemplate;
import org.springframework.boot.web.server.LocalServerPort;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.junit4.SpringRunner;
/**
* @author Filip Hrisafov
*/
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWebClient(registerRestTemplate = true)
public class FlowableModelerApplicationSecurityTest {
private static final Set<String> ACTUATOR_LINKS = new HashSet<>(
Arrays.asList(
"self",
"auditevents",
"beans",
"health",
"conditions",
"configprops",
"env",
"env-toMatch",
"info",
"loggers-name",
"loggers",
"heapdump",
"threaddump",
"metrics",
"metrics-requiredMetricName",
"scheduledtasks",
"httptrace",
"mappings"
)
);
@LocalServerPort
private int serverPort;
@Autowired
private TestRestTemplate restTemplate;
@MockBean
private RemoteIdmService remoteIdmService;
private Map<String, RemoteToken> tokens = new HashMap<>();
private Map<String, RemoteUser> users = new HashMap<>();
@Before
public void setUp() {
when(remoteIdmService.getToken(anyString()))
.thenAnswer((Answer<RemoteToken>) invocation -> tokens.get(invocation.<String>getArgument(0)));
when(remoteIdmService.getUser(anyString()))
.thenAnswer((Answer<RemoteUser>) invocation -> users.get(invocation.<String>getArgument(0)));
when(remoteIdmService.authenticateUser(anyString(), eq("test")))
.thenAnswer((Answer<RemoteUser>) invocation -> users.get(invocation.<String>getArgument(0)));
RemoteUser testUser = new RemoteUser();
testUser.setId("test-user");
testUser.setPrivileges(Collections.emptyList());
users.put("test-user", testUser);
RemoteUser testAdmin = new RemoteUser();
testAdmin.setId("test-admin");
testAdmin.setPrivileges(Collections.singletonList(DefaultPrivileges.ACCESS_ADMIN));
users.put("test-admin", testAdmin);
RemoteUser testModeler = new RemoteUser();
testModeler.setId("test-modeler");
testModeler.setPrivileges(Collections.singletonList(DefaultPrivileges.ACCESS_MODELER));
users.put("test-modeler", testModeler);
RemoteUser testRest = new RemoteUser();
testRest.setId("test-rest");
testRest.setPrivileges(Collections.singletonList(DefaultPrivileges.ACCESS_REST_API));
users.put("test-rest", testRest);
RemoteToken tokenUser = new RemoteToken();
tokenUser.setId("user");
tokenUser.setUserId("test-user");
tokenUser.setValue("test-user-value");
tokens.put("user", tokenUser);
RemoteToken tokenAdmin = new RemoteToken();
tokenAdmin.setId("admin");
tokenAdmin.setUserId("test-admin");
tokenAdmin.setValue("test-admin-value");
tokens.put("admin", tokenAdmin);
RemoteToken tokenModeler = new RemoteToken();
tokenModeler.setId("modeler");
tokenModeler.setUserId("test-modeler");
tokenModeler.setValue("test-modeler-value");
tokens.put("modeler", tokenModeler);
RemoteToken tokenRest = new RemoteToken();
tokenRest.setId("rest");
tokenRest.setUserId("test-rest");
tokenRest.setValue("test-rest-value");
tokens.put("rest", tokenRest);
}
@Test
public void nonAuthenticatedUserShouldBeRedirectedToIdm() {
String stencilsUrl = "http://localhost:" + serverPort + "/flowable-modeler/app/rest/stencil-sets/editor";
ResponseEntity<Object> result = restTemplate.getForEntity(stencilsUrl, Object.class);
assertThat(result.getStatusCode())
.as("GET editor stencil-sets")
.isEqualTo(HttpStatus.FOUND);
assertThat(result.getHeaders().getFirst(HttpHeaders.LOCATION))
.as("redirect location")
.isEqualTo("http://localhost:8080/flowable-idm/#/login?redirectOnAuthSuccess=true&redirectUrl=" + stencilsUrl);
}
@Test
public void nonAdminUserShouldBeRedirectedToIdm() {
String stencilsUrl = "http://localhost:" + serverPort + "/flowable-modeler/app/rest/stencil-sets/editor";
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.COOKIE, rememberMeCookie("user", "test-user-value"));
HttpEntity<?> request = new HttpEntity<>(headers);
ResponseEntity<Object> result = restTemplate.exchange(stencilsUrl, HttpMethod.GET, request, Object.class);
assertThat(result.getStatusCode())
.as("GET editor stencil-sets")
.isEqualTo(HttpStatus.FOUND);
assertThat(result.getHeaders().getFirst(HttpHeaders.LOCATION))
.as("redirect location")
.isEqualTo("http://localhost:8080/flowable-idm/#/login?redirectOnAuthSuccess=true&redirectUrl=" + stencilsUrl);
}
@Test
public void adminUserShouldBeRedirectedToIdm() {
String stencilsUrl = "http://localhost:" + serverPort + "/flowable-modeler/app/rest/stencil-sets/editor";
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.COOKIE, rememberMeCookie("admin", "test-admin-value"));
HttpEntity<?> request = new HttpEntity<>(headers);
ResponseEntity<Object> result = restTemplate.exchange(stencilsUrl, HttpMethod.GET, request, Object.class);
assertThat(result.getStatusCode())
.as("GET editor stencil-sets")
.isEqualTo(HttpStatus.FOUND);
assertThat(result.getHeaders().getFirst(HttpHeaders.LOCATION))
.as("redirect location")
.isEqualTo("http://localhost:8080/
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
可视化流程配置flowable-ui-modeler源码 免登录 (1855个子文件)
CHANGES 3KB
CHANGES 3KB
ModelServiceImpl.class 32KB
FlowableModelerApplicationSecurityTest.class 29KB
AppDefinitionImportService.class 23KB
FlowableDecisionTableService.class 16KB
AppDefinitionExportService.class 15KB
BpmnDisplayJsonConverter.class 15KB
FlowableCookieFilter.class 15KB
BaseAppDefinitionService.class 15KB
ModelResource.class 13KB
ModelImageService.class 13KB
FlowableModelQueryService.class 12KB
AppDefinitionPublishService.class 11KB
ApiModelResource.class 11KB
ModelsResource.class 11KB
RemoteIdmServiceImpl.class 11KB
CmmnDisplayJsonConverter.class 10KB
AppDefinitionServiceImpl.class 10KB
DatabaseConfiguration.class 9KB
AppDefinitionResource.class 7KB
AbstractInfoMapper.class 7KB
FlowableFormService.class 7KB
DecisionTableResource.class 5KB
SecurityConfiguration$FormLoginWebSecurityConfigurerAdapter.class 5KB
RestExceptionHandlerAdvice.class 5KB
AbstractModelBpmnResource.class 5KB
ModelRepositoryImpl.class 5KB
FormsResource.class 5KB
ServiceParameters.class 5KB
ActuatorRequestMatcher.class 4KB
BackwardsCompatiblePropertiesLoader.class 4KB
SecurityConfiguration$ActuatorWebSecurityConfigurationAdapter.class 4KB
AbstractModelCmmnResource.class 4KB
ApiModelsResource.class 4KB
SecurityConfiguration$ApiWebSecurityConfigurationAdapter.class 4KB
ModelRepresentation.class 4KB
DecisionTableDefinitionRepresentation.class 4KB
ModelService.class 4KB
FlowableCaseModelService.class 3KB
FlowableCommonAppProperties.class 3KB
EditorDisplayJsonClientResource.class 3KB
SecurityConfiguration.class 3KB
ModelHistoryRepositoryImpl.class 3KB
AbstractModelHistoryResource.class 3KB
ModelHistoryResource.class 3KB
AbstractModel.class 3KB
ModelRelationRepositoryImpl.class 3KB
UserRepresentation.class 3KB
ApiDispatcherServletConfiguration.class 3KB
RemoteIdmAuthenticationProvider.class 3KB
RemoteUser.class 3KB
DecisionTableRepresentation.class 3KB
FlowableCookieFilter$2.class 3KB
FormRepresentation.class 3KB
RemoteAccountResource.class 3KB
ConditionRepresentation.class 3KB
UserTaskInfoMapper.class 3KB
AppDefinition.class 3KB
BaseFlowableModelService.class 3KB
ApplicationConfiguration.class 3KB
FormResource.class 3KB
SecurityUtils.class 3KB
AppDefinitionRepresentation.class 2KB
FlowableModelerApplicationTest.class 2KB
DecisionTableModelConversionUtil.class 2KB
AppDispatcherServletConfiguration.class 2KB
CaseModelsResource.class 2KB
CaseRepresentation.class 2KB
DecisionTableExpressionRepresentation.class 2KB
EventInfoMapper.class 2KB
ImageGenerator.class 2KB
AppModelDefinition.class 2KB
AppDefinitionServiceRepresentation.class 2KB
DecisionTablesResource.class 2KB
StencilSetResource.class 2KB
ServiceTaskInfoMapper.class 2KB
EditorUsersResource.class 2KB
EditorGroupsResource.class 2KB
DefaultTenantProvider.class 2KB
FlowableCookieFilterRegistrationBean.class 2KB
ErrorInfo.class 2KB
AppDefinitionUpdateResultRepresentation.class 2KB
BaseModelerRestException.class 2KB
ModelValidationRestResource.class 2KB
ResultListDataRepresentation.class 2KB
ModelRelationResource.class 2KB
DecisionTableSaveRepresentation.class 2KB
JacksonConfiguration.class 2KB
Bootstrapper.class 2KB
FlowableCookieFilter$1.class 2KB
FormSaveRepresentation.class 2KB
CustomLocalDateSerializer.class 2KB
FormValidationError.class 2KB
FlowableModelerAppProperties.class 2KB
ModelCmmnResource.class 2KB
FormFieldValuesRepresentation.class 2KB
ModelBpmnResource.class 1KB
LightAppRepresentation.class 1KB
DecisionTableDefinitionModelRepresentation.class 1KB
共 1855 条
- 1
- 2
- 3
- 4
- 5
- 6
- 19
资源评论
- wj123rh2020-07-26nexus-3.25.0-03-unix.tar.gz
- Windli2021-10-19感觉就是6.4.1 model源码,根本没去掉IDM身份认证系统,
lms15122467633
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功