union-ark-web 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROJECT_OVERVIEW.md +405 -0
- package/README.md +177 -0
- package/ark-control/pom.xml +142 -0
- package/ark-control/src/local-mock/java/com/epcc/commons/securityproxy/api/SecurityResult.java +14 -0
- package/ark-control/src/local-mock/java/com/epcc/commons/securityproxy/api/SymmetricalSecurityService.java +11 -0
- package/ark-control/src/local-mock/java/com/epcc/dubbo/result/Result.java +29 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptField.java +16 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptFieldLong.java +17 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptFieldWithTag.java +16 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/BaseDataErrorCode.java +26 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/CheckException.java +33 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/ErrorCode.java +9 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/redis/RedisCacheService.java +131 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/util/Constant.java +24 -0
- package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/util/ResultUtil.java +9 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalMockSensitiveProxy.java +40 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalRedisCacheService.java +45 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalSensitiveHostConfiguration.java +27 -0
- package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalSensitiveProxyConfiguration.java +16 -0
- package/ark-control/src/main/java/com/union/control/ArkControlApplication.java +17 -0
- package/ark-control/src/main/java/com/union/control/dubbo/ProviderAccessLogFilter.java +45 -0
- package/ark-control/src/main/java/com/union/control/mapper/AgentExecutionMapper.java +35 -0
- package/ark-control/src/main/java/com/union/control/mapper/ConversationMapper.java +44 -0
- package/ark-control/src/main/java/com/union/control/mapper/MemoryStoreMapper.java +41 -0
- package/ark-control/src/main/java/com/union/control/mapper/ScheduledTaskMapper.java +96 -0
- package/ark-control/src/main/java/com/union/control/mapper/SensitiveAddressBookDemo.java +31 -0
- package/ark-control/src/main/java/com/union/control/mapper/SensitiveDataDemoMapper.java +24 -0
- package/ark-control/src/main/java/com/union/control/mapper/interceptor/AESInterceptor.java +265 -0
- package/ark-control/src/main/java/com/union/control/mapper/interceptor/AddressBookHandler.java +105 -0
- package/ark-control/src/main/java/com/union/control/schedule/ScheduledExecutionToken.java +55 -0
- package/ark-control/src/main/java/com/union/control/schedule/ScheduledTaskScheduler.java +206 -0
- package/ark-control/src/main/java/com/union/control/service/impl/AgentExecutionServiceImpl.java +212 -0
- package/ark-control/src/main/java/com/union/control/service/impl/AgentProxyServiceImpl.java +143 -0
- package/ark-control/src/main/java/com/union/control/service/impl/ConversationServiceImpl.java +245 -0
- package/ark-control/src/main/java/com/union/control/service/impl/MemoryStoreServiceImpl.java +252 -0
- package/ark-control/src/main/java/com/union/control/service/impl/RunningAnalysisMockServiceImpl.java +301 -0
- package/ark-control/src/main/java/com/union/control/service/impl/ScheduledTaskServiceImpl.java +576 -0
- package/ark-control/src/main/java/com/union/control/service/impl/SensitiveDataDemoServiceImpl.java +144 -0
- package/ark-control/src/main/java/com/union/control/service/sensitive/RedisRevealTokenStore.java +90 -0
- package/ark-control/src/main/java/com/union/control/service/sensitive/SensitiveRevealProcessor.java +319 -0
- package/ark-control/src/main/java/com/union/control/service/sensitive/SensitiveRevealServiceImpl.java +72 -0
- package/ark-control/src/main/java/com/union/control/utils/AgentSupport.java +103 -0
- package/ark-control/src/main/java/com/union/control/utils/security/SymmetricalSecurityUtils.java +160 -0
- package/ark-control/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter +1 -0
- package/ark-control/src/main/resources/application.properties +4 -0
- package/ark-control/src/main/resources/application.yml +32 -0
- package/ark-control/src/main/resources/dubbo-provider.xml +20 -0
- package/ark-control/src/main/resources/mapper/AgentExecutionMapper.xml +75 -0
- package/ark-control/src/main/resources/mapper/ConversationMapper.xml +110 -0
- package/ark-control/src/main/resources/mapper/MemoryStoreMapper.xml +74 -0
- package/ark-control/src/main/resources/mapper/ScheduledTaskMapper.xml +286 -0
- package/ark-control/src/main/resources/mapper/SensitiveDataDemoMapper.xml +55 -0
- package/ark-control/src/main/resources/schema.sql +146 -0
- package/ark-control/src/test/java/com/union/control/AgentExecutionServiceTest.java +170 -0
- package/ark-control/src/test/java/com/union/control/ArkControlStructureContractTest.java +107 -0
- package/ark-control/src/test/java/com/union/control/ConversationServiceTest.java +89 -0
- package/ark-control/src/test/java/com/union/control/MemoryStoreServiceTest.java +26 -0
- package/ark-control/src/test/java/com/union/control/PydanticAiControlContractTest.java +52 -0
- package/ark-control/src/test/java/com/union/control/TestJson.java +45 -0
- package/ark-control/src/test/java/com/union/control/dubbo/ProviderAccessLogFilterTest.java +53 -0
- package/ark-control/src/test/java/com/union/control/local/sensitive/LocalSensitiveProxyConfigurationTest.java +23 -0
- package/ark-control/src/test/java/com/union/control/mapper/interceptor/AESInterceptorCompatibilityTest.java +505 -0
- package/ark-control/src/test/java/com/union/control/schedule/ScheduledExecutionTokenTest.java +27 -0
- package/ark-control/src/test/java/com/union/control/schedule/ScheduledTaskSchedulerTest.java +51 -0
- package/ark-control/src/test/java/com/union/control/service/AgentProxyServiceTest.java +111 -0
- package/ark-control/src/test/java/com/union/control/service/ScheduledTaskServiceTest.java +483 -0
- package/ark-control/src/test/java/com/union/control/service/impl/SensitiveDataDemoServiceImplTest.java +104 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/RedisRevealTokenStoreTest.java +65 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealBoundaryTest.java +99 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealProcessorCodecTest.java +111 -0
- package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealProcessorTest.java +111 -0
- package/ark-control/src/test/java/com/union/control/utils/security/SymmetricalSecurityUtilsCompatibilityTest.java +87 -0
- package/ark-control-facade/pom.xml +16 -0
- package/ark-control-facade/src/main/java/com/union/control/service/AgentExecutionService.java +8 -0
- package/ark-control-facade/src/main/java/com/union/control/service/AgentProxyService.java +7 -0
- package/ark-control-facade/src/main/java/com/union/control/service/AgentResponse.java +22 -0
- package/ark-control-facade/src/main/java/com/union/control/service/ConversationService.java +12 -0
- package/ark-control-facade/src/main/java/com/union/control/service/MemoryStoreService.java +12 -0
- package/ark-control-facade/src/main/java/com/union/control/service/RunningAnalysisMockService.java +10 -0
- package/ark-control-facade/src/main/java/com/union/control/service/ScheduledTaskService.java +40 -0
- package/ark-control-facade/src/main/java/com/union/control/service/SensitiveDataDemoService.java +13 -0
- package/ark-control-facade/src/main/java/com/union/control/service/sensitive/SensitiveRevealService.java +18 -0
- package/ark-web/README.md +80 -0
- package/ark-web/pom.xml +105 -0
- package/ark-web/src/local-mock/java/com/epcc/arkweb/mock/ArkAuthServiceMock.java +105 -0
- package/ark-web/src/local-mock/java/com/epcc/arkweb/mock/LocalKaptchaConfiguration.java +26 -0
- package/ark-web/src/main/java/com/epcc/arkweb/Application.java +13 -0
- package/ark-web/src/main/java/com/epcc/arkweb/config/InterceptorConfig.java +20 -0
- package/ark-web/src/main/java/com/epcc/arkweb/config/Realm.java +64 -0
- package/ark-web/src/main/java/com/epcc/arkweb/config/ShiroConfig.java +129 -0
- package/ark-web/src/main/java/com/epcc/arkweb/filter/LoginFormFilter.java +43 -0
- package/ark-web/src/main/java/com/epcc/arkweb/helper/AuthContextHolder.java +39 -0
- package/ark-web/src/main/java/com/epcc/arkweb/helper/AuthenticatedRequest.java +91 -0
- package/ark-web/src/main/java/com/epcc/arkweb/model/ShiroUser.java +21 -0
- package/ark-web/src/main/java/com/epcc/arkweb/utils/ResultMsg.java +19 -0
- package/ark-web/src/main/java/com/epcc/arkweb/vo/llm/ScheduledTaskCommandVO.java +30 -0
- package/ark-web/src/main/java/com/epcc/arkweb/vo/llm/ScheduledTaskQueryVO.java +20 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/CommonController.java +25 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentAuthorizationInterceptor.java +229 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentController.java +165 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentPermission.java +13 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/LlmController.java +209 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/llm/ScheduledTaskController.java +160 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveCaptchaService.java +146 -0
- package/ark-web/src/main/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveRevealController.java +163 -0
- package/ark-web/src/main/resources/application.properties +1 -0
- package/ark-web/src/main/resources/application.yml +23 -0
- package/ark-web/src/main/resources/dubbo-consumer.xml +19 -0
- package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/CasShiroConfig.java +229 -0
- package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/InterceptorConfig.java +35 -0
- package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/ShiroConfig.java +161 -0
- package/ark-web/src/test/java/com/epcc/arkweb/ArkWebStructureContractTest.java +290 -0
- package/ark-web/src/test/java/com/epcc/arkweb/ShiroTestSupport.java +32 -0
- package/ark-web/src/test/java/com/epcc/arkweb/config/LocalShiroIntegrationTest.java +121 -0
- package/ark-web/src/test/java/com/epcc/arkweb/helper/AuthenticatedRequestTest.java +131 -0
- package/ark-web/src/test/java/com/epcc/arkweb/local/LocalArkAuthServiceMockTest.java +17 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/llm/AgentAuthorizationInterceptorTest.java +134 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/llm/AgentControllerAuthorizationTest.java +97 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/llm/LlmControllerTest.java +113 -0
- package/ark-web/src/test/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveRevealControllerTest.java +273 -0
- package/package.json +18 -0
- package/pom.xml +16 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
server:
|
|
2
|
+
port: ${SERVER_PORT:8080}
|
|
3
|
+
address: ${SERVER_ADDRESS:127.0.0.1}
|
|
4
|
+
|
|
5
|
+
arkshiro:
|
|
6
|
+
sso: false
|
|
7
|
+
|
|
8
|
+
agent:
|
|
9
|
+
py-app-base-url: ${PY_APP_BASE_URL:http://127.0.0.1:8083}
|
|
10
|
+
local-user-id: ${LOCAL_USER_ID:user-1}
|
|
11
|
+
local-password: ${LOCAL_PASSWORD:local-only}
|
|
12
|
+
local-org-code: ${LOCAL_ORG_CODE:104100000004}
|
|
13
|
+
local-authorized-role-id: ${LOCAL_AUTHORIZED_ROLE_ID:role-1}
|
|
14
|
+
|
|
15
|
+
dubbo:
|
|
16
|
+
application:
|
|
17
|
+
name: ark-web
|
|
18
|
+
registry:
|
|
19
|
+
address: ${DUBBO_REGISTRY_ADDRESS:zookeeper://127.0.0.1:2181}
|
|
20
|
+
consumer:
|
|
21
|
+
check: ${DUBBO_CONSUMER_CHECK:false}
|
|
22
|
+
direct-url: ${DUBBO_DIRECT_URL:}
|
|
23
|
+
timeout-ms: ${DUBBO_CONSUMER_TIMEOUT_MS:10000}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<beans xmlns="http://www.springframework.org/schema/beans"
|
|
3
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
|
+
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
|
|
5
|
+
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
|
|
6
|
+
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
|
|
7
|
+
<dubbo:application name="${dubbo.application.name}"/>
|
|
8
|
+
<dubbo:registry address="${dubbo.registry.address}"/>
|
|
9
|
+
<dubbo:consumer timeout="${dubbo.consumer.timeout-ms}" retries="0"/>
|
|
10
|
+
|
|
11
|
+
<dubbo:reference id="agentExecutionService" interface="com.union.control.service.AgentExecutionService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
12
|
+
<dubbo:reference id="agentProxyService" interface="com.union.control.service.AgentProxyService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}" timeout="#{T(java.lang.Math).ceil(${AGENT_MAX_RUN_SECONDS:900} * 1000)}"/>
|
|
13
|
+
<dubbo:reference id="conversationService" interface="com.union.control.service.ConversationService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
14
|
+
<dubbo:reference id="memoryStoreService" interface="com.union.control.service.MemoryStoreService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
15
|
+
<dubbo:reference id="runningAnalysisMockService" interface="com.union.control.service.RunningAnalysisMockService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
16
|
+
<dubbo:reference id="scheduledTaskService" interface="com.union.control.service.ScheduledTaskService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
17
|
+
<dubbo:reference id="sensitiveDataDemoService" interface="com.union.control.service.SensitiveDataDemoService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
18
|
+
<dubbo:reference id="sensitiveRevealService" interface="com.union.control.service.sensitive.SensitiveRevealService" check="${dubbo.consumer.check}" url="${dubbo.consumer.direct-url}"/>
|
|
19
|
+
</beans>
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
package com.epcc.arkweb.config;
|
|
2
|
+
|
|
3
|
+
import com.epcc.arkweb.service.redis.ShiroSessionRedisDao;
|
|
4
|
+
import com.epcc.arkweb.service.shirosession.ShiroSessionListener;
|
|
5
|
+
import com.epcc.baseservice.dal.service.UnifyRedisService;
|
|
6
|
+
import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
|
|
7
|
+
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
|
|
8
|
+
import org.apache.shiro.cas.CasFilter;
|
|
9
|
+
import org.apache.shiro.cas.CasRealm;
|
|
10
|
+
import org.apache.shiro.cas.CasSubjectFactory;
|
|
11
|
+
import org.apache.shiro.mgt.SecurityManager;
|
|
12
|
+
import org.apache.shiro.mgt.SessionsSecurityManager;
|
|
13
|
+
import org.apache.shiro.session.SessionListener;
|
|
14
|
+
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
|
|
15
|
+
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
|
|
16
|
+
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
|
17
|
+
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
|
18
|
+
import org.apache.shiro.web.servlet.SimpleCookie;
|
|
19
|
+
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
|
|
20
|
+
import org.jasig.cas.client.session.SingleSignOutFilter;
|
|
21
|
+
import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
|
|
22
|
+
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
|
23
|
+
import org.springframework.beans.factory.annotation.Value;
|
|
24
|
+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
25
|
+
import org.springframework.boot.context.properties.ConfigurationProperties;
|
|
26
|
+
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
|
27
|
+
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
|
|
28
|
+
import org.springframework.context.annotation.Bean;
|
|
29
|
+
import org.springframework.context.annotation.Configuration;
|
|
30
|
+
import org.springframework.context.annotation.DependsOn;
|
|
31
|
+
import org.springframework.core.Ordered;
|
|
32
|
+
import org.springframework.core.annotation.Order;
|
|
33
|
+
import org.springframework.web.filter.DelegatingFilterProxy;
|
|
34
|
+
|
|
35
|
+
import javax.servlet.Filter;
|
|
36
|
+
import java.util.*;
|
|
37
|
+
|
|
38
|
+
/***
|
|
39
|
+
* @auther: suwen
|
|
40
|
+
* @date: 17:58 2021/2/26
|
|
41
|
+
*/
|
|
42
|
+
@Configuration
|
|
43
|
+
@ConfigurationProperties(prefix = "cas")
|
|
44
|
+
@ConditionalOnProperty(prefix = "arkshiro", name = "sso",havingValue = "true")
|
|
45
|
+
public class CasShiroConfig {
|
|
46
|
+
|
|
47
|
+
@Value("${cas.casServerUrlPrefix}")
|
|
48
|
+
public String casServerUrlPrefix;
|
|
49
|
+
|
|
50
|
+
@Value("${cookie.secure:false}")
|
|
51
|
+
private String cookieSecure;
|
|
52
|
+
|
|
53
|
+
@Value("${cas.casLoginUrl}")
|
|
54
|
+
public String casLoginUrl;
|
|
55
|
+
|
|
56
|
+
@Value("${cas.casLogoutUrl}")
|
|
57
|
+
public String casLogoutUrl;
|
|
58
|
+
|
|
59
|
+
@Value("${cas.shiroServerUrlPrefix}")
|
|
60
|
+
public String shiroServerUrlPrefix;
|
|
61
|
+
|
|
62
|
+
@Value("${cas.casFilterUrlPattern}")
|
|
63
|
+
public String casFilterUrlPattern;
|
|
64
|
+
|
|
65
|
+
@Value("${cas.loginUrl}")
|
|
66
|
+
public String loginUrl;
|
|
67
|
+
|
|
68
|
+
@Value("${cas.logoutUrl}")
|
|
69
|
+
public String logoutUrl;
|
|
70
|
+
|
|
71
|
+
public static final String loginSuccessUrl = "/index.html";
|
|
72
|
+
|
|
73
|
+
public static final String unauthorizedUrl = "/403.html";
|
|
74
|
+
|
|
75
|
+
/*@Bean
|
|
76
|
+
public SessionsSecurityManager securityManager(CasRealm realm){
|
|
77
|
+
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
|
|
78
|
+
defaultWebSecurityManager.setRealm(realm);
|
|
79
|
+
defaultWebSecurityManager.setSubjectFactory(new CasSubjectFactory());
|
|
80
|
+
return defaultWebSecurityManager;
|
|
81
|
+
}*/
|
|
82
|
+
|
|
83
|
+
@Bean
|
|
84
|
+
public ArkCasRealm arkCasRealm(){
|
|
85
|
+
ArkCasRealm arkCasRealm = new ArkCasRealm();
|
|
86
|
+
arkCasRealm.setCasServerUrlPrefix(casServerUrlPrefix);
|
|
87
|
+
arkCasRealm.setCasService(shiroServerUrlPrefix+casFilterUrlPattern);
|
|
88
|
+
arkCasRealm.setAuthenticationCachingEnabled(false);
|
|
89
|
+
return arkCasRealm;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@Bean
|
|
93
|
+
@Order(Ordered.HIGHEST_PRECEDENCE)
|
|
94
|
+
public ServletListenerRegistrationBean singleSingOutHttpSessionListener(){
|
|
95
|
+
ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();
|
|
96
|
+
bean.setListener(new SingleSignOutHttpSessionListener());
|
|
97
|
+
bean.setEnabled(true);
|
|
98
|
+
return bean;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Bean
|
|
102
|
+
public FilterRegistrationBean singleSingOutFilter(){
|
|
103
|
+
FilterRegistrationBean bean = new FilterRegistrationBean();
|
|
104
|
+
bean.setName("singleSingOutFilter");
|
|
105
|
+
bean.setFilter(new SingleSignOutFilter());
|
|
106
|
+
bean.addUrlPatterns("/*");
|
|
107
|
+
bean.setEnabled(true);
|
|
108
|
+
return bean;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@Bean
|
|
112
|
+
public FilterRegistrationBean delegatingFilterProxy(){
|
|
113
|
+
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
|
|
114
|
+
filterRegistrationBean.setFilter(new DelegatingFilterProxy("shiroFilter"));
|
|
115
|
+
filterRegistrationBean.addInitParameter("targetFilterLifecycle","true");
|
|
116
|
+
filterRegistrationBean.setEnabled(true);
|
|
117
|
+
filterRegistrationBean.addUrlPatterns("/*");
|
|
118
|
+
return filterRegistrationBean;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@Bean(name="casFilter")
|
|
122
|
+
public CasFilter getCasFilter(){
|
|
123
|
+
CasFilter casFilter = new CasFilter();
|
|
124
|
+
casFilter.setName("casFilter");
|
|
125
|
+
casFilter.setEnabled(true);
|
|
126
|
+
casFilter.setFailureUrl(loginUrl);
|
|
127
|
+
casFilter.setSuccessUrl(loginSuccessUrl);
|
|
128
|
+
return casFilter;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
@Bean(name = "shiroFilter")
|
|
132
|
+
public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager, CasFilter casFilter){
|
|
133
|
+
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
|
134
|
+
shiroFilterFactoryBean.setSecurityManager(securityManager);
|
|
135
|
+
shiroFilterFactoryBean.setLoginUrl(loginUrl);
|
|
136
|
+
shiroFilterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);
|
|
137
|
+
|
|
138
|
+
Map<String,Filter> filters = new HashMap<>();
|
|
139
|
+
filters.put("casFilter",casFilter);
|
|
140
|
+
shiroFilterFactoryBean.setFilters(filters);
|
|
141
|
+
//拦截器.
|
|
142
|
+
Map<String, String> filterMap = new LinkedHashMap<>();
|
|
143
|
+
// 配置不会被拦截的链接 顺序判断
|
|
144
|
+
filterMap.put(casFilterUrlPattern,"casFilter");
|
|
145
|
+
filterMap.put("/css/**", "anon");
|
|
146
|
+
filterMap.put("/images/**", "anon");
|
|
147
|
+
filterMap.put("/script/**", "anon");
|
|
148
|
+
filterMap.put("/plugins/**", "anon");
|
|
149
|
+
filterMap.put("/api/**", "anon");
|
|
150
|
+
filterMap.put("/agent/**", "anon");
|
|
151
|
+
filterMap.put("/lhyw/kickidc", "anon");
|
|
152
|
+
filterMap.put("/lhyw/recoverIdc", "anon");
|
|
153
|
+
filterMap.put("/lhyw/kickidc/healthcheck", "anon");
|
|
154
|
+
filterMap.put("/healthcheck.html", "anon");
|
|
155
|
+
filterMap.put("/SSL/healthcheck.html", "anon");
|
|
156
|
+
filterMap.put("/**","authc");
|
|
157
|
+
|
|
158
|
+
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
|
|
159
|
+
return shiroFilterFactoryBean;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
@Bean
|
|
163
|
+
public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
|
|
164
|
+
return new LifecycleBeanPostProcessor();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@Bean
|
|
168
|
+
@DependsOn({"lifecycleBeanPostProcessor"})
|
|
169
|
+
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
|
|
170
|
+
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
|
|
171
|
+
advisorAutoProxyCreator.setProxyTargetClass(true);
|
|
172
|
+
return advisorAutoProxyCreator;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
@Bean
|
|
176
|
+
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
|
|
177
|
+
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
|
|
178
|
+
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
|
|
179
|
+
return authorizationAttributeSourceAdvisor;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
@Bean
|
|
183
|
+
public ModularRealmAuthenticator modularRealmAuthenticator(){
|
|
184
|
+
ModularRealmAuthenticator modularRealmAuthenticator = new ModularRealmAuthenticator();
|
|
185
|
+
modularRealmAuthenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
|
|
186
|
+
return modularRealmAuthenticator;
|
|
187
|
+
}
|
|
188
|
+
@Bean
|
|
189
|
+
public DefaultWebSessionManager defaultWebSessionManager(ShiroSessionRedisDao shiroSessionRedisDao){
|
|
190
|
+
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
|
|
191
|
+
//全局会话超时时间,默认30分钟(1800000)
|
|
192
|
+
defaultWebSessionManager.setGlobalSessionTimeout(1800000);
|
|
193
|
+
//是否在会话过期后会调用SessionDAO的delete方法删除会话 默认true
|
|
194
|
+
defaultWebSessionManager.setDeleteInvalidSessions(true);
|
|
195
|
+
//是否开启会话验证器任务 默认true
|
|
196
|
+
defaultWebSessionManager.setSessionValidationSchedulerEnabled(true);
|
|
197
|
+
//会话验证器调度时间
|
|
198
|
+
defaultWebSessionManager.setSessionValidationInterval(900000);
|
|
199
|
+
defaultWebSessionManager.setSessionDAO(shiroSessionRedisDao);
|
|
200
|
+
//默认JSESSIONID,同tomcat/jetty在cookie中缓存标识相同,修改用于防止访问404页面时,容器生成的标识把shiro的覆盖掉
|
|
201
|
+
SimpleCookie simpleCookie=new SimpleCookie("CASSESSIONID");
|
|
202
|
+
simpleCookie.setHttpOnly(true);
|
|
203
|
+
simpleCookie.setSecure(Boolean.parseBoolean(cookieSecure));
|
|
204
|
+
defaultWebSessionManager.setSessionIdCookie(new SimpleCookie(simpleCookie));
|
|
205
|
+
//在地址栏去掉JSESSIONID
|
|
206
|
+
defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
|
|
207
|
+
return defaultWebSessionManager;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@Bean
|
|
211
|
+
public DefaultWebSecurityManager defaultWebSecurityManager(DefaultWebSessionManager defaultWebSessionManager, ModularRealmAuthenticator modularRealmAuthenticator, ArkCasRealm arkCasRealm){
|
|
212
|
+
DefaultWebSecurityManager webSecurityManager = new DefaultWebSecurityManager();
|
|
213
|
+
webSecurityManager.setSubjectFactory(new CasSubjectFactory());
|
|
214
|
+
webSecurityManager.setAuthenticator(modularRealmAuthenticator);
|
|
215
|
+
webSecurityManager.setRealm(arkCasRealm);
|
|
216
|
+
webSecurityManager.setSessionManager(defaultWebSessionManager);
|
|
217
|
+
return webSecurityManager;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
@Bean
|
|
222
|
+
public ShiroSessionRedisDao shiroSessionRedisDao(UnifyRedisService unifyRedisService){
|
|
223
|
+
ShiroSessionRedisDao shiroSessionRedisDao = new ShiroSessionRedisDao();
|
|
224
|
+
shiroSessionRedisDao.setRedisCache(unifyRedisService);
|
|
225
|
+
return shiroSessionRedisDao;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
package com.epcc.arkweb.config;
|
|
2
|
+
|
|
3
|
+
import com.epcc.arkweb.filter.CSRFInterceptor;
|
|
4
|
+
import com.epcc.arkweb.filter.RefererInterceptor;
|
|
5
|
+
import com.epcc.arkweb.filter.SessionIpInterceptor;
|
|
6
|
+
import com.epcc.arkweb.web.llm.AgentAuthorizationInterceptor;
|
|
7
|
+
import org.springframework.beans.factory.annotation.Autowired;
|
|
8
|
+
import org.springframework.context.annotation.Configuration;
|
|
9
|
+
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
|
10
|
+
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
11
|
+
|
|
12
|
+
@Configuration
|
|
13
|
+
public class InterceptorConfig implements WebMvcConfigurer {
|
|
14
|
+
@Autowired
|
|
15
|
+
private AgentAuthorizationInterceptor agentAuthorizationInterceptor;
|
|
16
|
+
@Autowired
|
|
17
|
+
private RefererInterceptor refererInterceptor;
|
|
18
|
+
@Autowired
|
|
19
|
+
private SessionIpInterceptor sessionIpInterceptor;
|
|
20
|
+
@Autowired
|
|
21
|
+
private CSRFInterceptor csrfInterceptor;
|
|
22
|
+
|
|
23
|
+
@Override
|
|
24
|
+
public void addInterceptors(InterceptorRegistry registry) {
|
|
25
|
+
registry.addInterceptor(agentAuthorizationInterceptor)
|
|
26
|
+
.addPathPatterns("/agent/**");
|
|
27
|
+
registry.addInterceptor(refererInterceptor).addPathPatterns("/**")
|
|
28
|
+
.excludePathPatterns("/", "/login.html", "/logout", "/agent/**");
|
|
29
|
+
registry.addInterceptor(sessionIpInterceptor).addPathPatterns("/**")
|
|
30
|
+
.excludePathPatterns("/", "/login.html", "/error",
|
|
31
|
+
"/healthcheck.html", "/logout", "/agent/**");
|
|
32
|
+
registry.addInterceptor(csrfInterceptor).addPathPatterns("/audit/**")
|
|
33
|
+
.excludePathPatterns("/", "/login.html", "/logout", "/agent/**");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
package com.epcc.arkweb.config;
|
|
2
|
+
|
|
3
|
+
import com.epcc.arkweb.filter.LoginFormFilter;
|
|
4
|
+
import com.epcc.arkweb.service.redis.ShiroSessionRedisDao;
|
|
5
|
+
import com.epcc.arkweb.service.shirosession.ShiroSessionListener;
|
|
6
|
+
import com.epcc.baseservice.dal.service.UnifyRedisService;
|
|
7
|
+
import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
|
|
8
|
+
import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
|
|
9
|
+
import org.apache.shiro.mgt.SecurityManager;
|
|
10
|
+
import org.apache.shiro.session.SessionListener;
|
|
11
|
+
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
|
|
12
|
+
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
|
|
13
|
+
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
|
|
14
|
+
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
|
|
15
|
+
import org.apache.shiro.web.servlet.SimpleCookie;
|
|
16
|
+
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
|
|
17
|
+
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
|
18
|
+
import org.springframework.beans.factory.annotation.Value;
|
|
19
|
+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
|
20
|
+
import org.springframework.context.annotation.Bean;
|
|
21
|
+
import org.springframework.context.annotation.Configuration;
|
|
22
|
+
import org.springframework.context.annotation.DependsOn;
|
|
23
|
+
|
|
24
|
+
import javax.servlet.Filter;
|
|
25
|
+
import java.util.*;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* shiro配置
|
|
29
|
+
*/
|
|
30
|
+
@Configuration
|
|
31
|
+
@ConditionalOnProperty(prefix = "arkshiro", name = "sso",havingValue = "false")
|
|
32
|
+
public class ShiroConfig {
|
|
33
|
+
@Value("${prop.flag}")
|
|
34
|
+
private String propFlag;
|
|
35
|
+
|
|
36
|
+
@Value("${cookie.secure:false}")
|
|
37
|
+
private String cookieSecure;
|
|
38
|
+
|
|
39
|
+
@Bean
|
|
40
|
+
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
|
|
41
|
+
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
|
42
|
+
shiroFilterFactoryBean.setSecurityManager(securityManager);
|
|
43
|
+
//拦截器.
|
|
44
|
+
Map<String, String> filterMap = new LinkedHashMap<>();
|
|
45
|
+
// 配置不会被拦截的链接 顺序判断
|
|
46
|
+
/*filterMap.put("/arkvue/**", "anon");*/
|
|
47
|
+
filterMap.put("/error", "anon");
|
|
48
|
+
filterMap.put("/css/**", "anon");
|
|
49
|
+
filterMap.put("/images/**", "anon");
|
|
50
|
+
filterMap.put("/script/**", "anon");
|
|
51
|
+
filterMap.put("/static/**", "anon");
|
|
52
|
+
filterMap.put("/plugins/**", "anon");
|
|
53
|
+
filterMap.put("/.ico", "anon");
|
|
54
|
+
filterMap.put("/healthcheck.html", "anon");
|
|
55
|
+
filterMap.put("/SSL/healthcheck.html", "anon");
|
|
56
|
+
filterMap.put("/agent/**", "anon");
|
|
57
|
+
//配置退出 过滤器,其中的具体的退出代码Shiro已经替我们实现了
|
|
58
|
+
// filterMap.put("/loginOut.do", "logout");
|
|
59
|
+
|
|
60
|
+
//<!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边 -->:这是一个坑呢,一不小心代码就不好使了;
|
|
61
|
+
//<!-- authc:所有url都必须认证通过才可以访问; anon:所有url都都可以匿名访问-->
|
|
62
|
+
filterMap.put("/**", "authc");
|
|
63
|
+
filterMap.put("/union-op/**", "authc");
|
|
64
|
+
// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面
|
|
65
|
+
shiroFilterFactoryBean.setLoginUrl("/login.html");
|
|
66
|
+
//未授权界面;
|
|
67
|
+
shiroFilterFactoryBean.setUnauthorizedUrl("/403.html");
|
|
68
|
+
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
|
|
69
|
+
// 登录成功后要跳转的链接
|
|
70
|
+
shiroFilterFactoryBean.setSuccessUrl("/index.html");
|
|
71
|
+
Map<String, Filter> filters = new HashMap<>();
|
|
72
|
+
LoginFormFilter loginFormFilter = new LoginFormFilter(propFlag);
|
|
73
|
+
filters.put("authc",loginFormFilter);
|
|
74
|
+
shiroFilterFactoryBean.setFilters(filters);
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
return shiroFilterFactoryBean;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Bean
|
|
81
|
+
public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){
|
|
82
|
+
DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
|
|
83
|
+
defaultAdvisorAutoProxyCreator.setUsePrefix(true);
|
|
84
|
+
return defaultAdvisorAutoProxyCreator;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@Bean
|
|
88
|
+
public ModularRealmAuthenticator modularRealmAuthenticator(){
|
|
89
|
+
ModularRealmAuthenticator modularRealmAuthenticator = new ModularRealmAuthenticator();
|
|
90
|
+
modularRealmAuthenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
|
|
91
|
+
return modularRealmAuthenticator;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@Bean
|
|
95
|
+
public DefaultWebSessionManager defaultWebSessionManager(ShiroSessionRedisDao shiroSessionRedisDao){
|
|
96
|
+
DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
|
|
97
|
+
//全局会话超时时间,默认30分钟(1800000)
|
|
98
|
+
defaultWebSessionManager.setGlobalSessionTimeout(1800000);
|
|
99
|
+
//是否在会话过期后会调用SessionDAO的delete方法删除会话 默认true
|
|
100
|
+
defaultWebSessionManager.setDeleteInvalidSessions(true);
|
|
101
|
+
//是否开启会话验证器任务 默认true
|
|
102
|
+
defaultWebSessionManager.setSessionValidationSchedulerEnabled(true);
|
|
103
|
+
//会话验证器调度时间
|
|
104
|
+
defaultWebSessionManager.setSessionValidationInterval(900000);
|
|
105
|
+
defaultWebSessionManager.setSessionDAO(shiroSessionRedisDao);
|
|
106
|
+
//默认JSESSIONID,同tomcat/jetty在cookie中缓存标识相同,修改用于防止访问404页面时,容器生成的标识把shiro的覆盖掉
|
|
107
|
+
SimpleCookie simpleCookie=new SimpleCookie("SHRIOSESSIONID");
|
|
108
|
+
simpleCookie.setHttpOnly(true);
|
|
109
|
+
simpleCookie.setSecure(Boolean.parseBoolean(cookieSecure));
|
|
110
|
+
|
|
111
|
+
defaultWebSessionManager.setSessionIdCookie(new SimpleCookie(simpleCookie));
|
|
112
|
+
Collection<SessionListener> listeners = new ArrayList<>();
|
|
113
|
+
listeners.add(new ShiroSessionListener());
|
|
114
|
+
defaultWebSessionManager.setSessionListeners(listeners);
|
|
115
|
+
//在地址栏去掉JSESSIONID
|
|
116
|
+
defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
|
|
117
|
+
return defaultWebSessionManager;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@Bean
|
|
121
|
+
public DefaultWebSecurityManager defaultWebSecurityManager(DefaultWebSessionManager defaultWebSessionManager,ModularRealmAuthenticator modularRealmAuthenticator,Realm realm){
|
|
122
|
+
DefaultWebSecurityManager webSecurityManager = new DefaultWebSecurityManager();
|
|
123
|
+
webSecurityManager.setAuthenticator(modularRealmAuthenticator);
|
|
124
|
+
webSecurityManager.setRealm(realm);
|
|
125
|
+
webSecurityManager.setSessionManager(defaultWebSessionManager);
|
|
126
|
+
return webSecurityManager;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@Bean
|
|
130
|
+
public Realm arkRealm() {
|
|
131
|
+
Realm arkRealm = new Realm();
|
|
132
|
+
return arkRealm;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
@Bean
|
|
136
|
+
public ShiroSessionRedisDao shiroSessionRedisDao(UnifyRedisService unifyRedisService){
|
|
137
|
+
ShiroSessionRedisDao shiroSessionRedisDao = new ShiroSessionRedisDao();
|
|
138
|
+
shiroSessionRedisDao.setRedisCache(unifyRedisService);
|
|
139
|
+
return shiroSessionRedisDao;
|
|
140
|
+
}
|
|
141
|
+
@Bean
|
|
142
|
+
public static LifecycleBeanPostProcessor lifecycleBeanPostProcessor(){
|
|
143
|
+
return new LifecycleBeanPostProcessor();
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
@Bean
|
|
147
|
+
@DependsOn({"lifecycleBeanPostProcessor"})
|
|
148
|
+
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
|
|
149
|
+
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
|
|
150
|
+
advisorAutoProxyCreator.setProxyTargetClass(true);
|
|
151
|
+
return advisorAutoProxyCreator;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
@Bean
|
|
155
|
+
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
|
|
156
|
+
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
|
|
157
|
+
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
|
|
158
|
+
return authorizationAttributeSourceAdvisor;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
}
|