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.
Files changed (122) hide show
  1. package/PROJECT_OVERVIEW.md +405 -0
  2. package/README.md +177 -0
  3. package/ark-control/pom.xml +142 -0
  4. package/ark-control/src/local-mock/java/com/epcc/commons/securityproxy/api/SecurityResult.java +14 -0
  5. package/ark-control/src/local-mock/java/com/epcc/commons/securityproxy/api/SymmetricalSecurityService.java +11 -0
  6. package/ark-control/src/local-mock/java/com/epcc/dubbo/result/Result.java +29 -0
  7. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptField.java +16 -0
  8. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptFieldLong.java +17 -0
  9. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/annotation/EnDecryptFieldWithTag.java +16 -0
  10. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/BaseDataErrorCode.java +26 -0
  11. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/CheckException.java +33 -0
  12. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/exception/ErrorCode.java +9 -0
  13. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/redis/RedisCacheService.java +131 -0
  14. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/util/Constant.java +24 -0
  15. package/ark-control/src/local-mock/java/com/nucc/channel/ark/common/util/ResultUtil.java +9 -0
  16. package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalMockSensitiveProxy.java +40 -0
  17. package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalRedisCacheService.java +45 -0
  18. package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalSensitiveHostConfiguration.java +27 -0
  19. package/ark-control/src/local-mock/java/com/union/control/local/sensitive/LocalSensitiveProxyConfiguration.java +16 -0
  20. package/ark-control/src/main/java/com/union/control/ArkControlApplication.java +17 -0
  21. package/ark-control/src/main/java/com/union/control/dubbo/ProviderAccessLogFilter.java +45 -0
  22. package/ark-control/src/main/java/com/union/control/mapper/AgentExecutionMapper.java +35 -0
  23. package/ark-control/src/main/java/com/union/control/mapper/ConversationMapper.java +44 -0
  24. package/ark-control/src/main/java/com/union/control/mapper/MemoryStoreMapper.java +41 -0
  25. package/ark-control/src/main/java/com/union/control/mapper/ScheduledTaskMapper.java +96 -0
  26. package/ark-control/src/main/java/com/union/control/mapper/SensitiveAddressBookDemo.java +31 -0
  27. package/ark-control/src/main/java/com/union/control/mapper/SensitiveDataDemoMapper.java +24 -0
  28. package/ark-control/src/main/java/com/union/control/mapper/interceptor/AESInterceptor.java +265 -0
  29. package/ark-control/src/main/java/com/union/control/mapper/interceptor/AddressBookHandler.java +105 -0
  30. package/ark-control/src/main/java/com/union/control/schedule/ScheduledExecutionToken.java +55 -0
  31. package/ark-control/src/main/java/com/union/control/schedule/ScheduledTaskScheduler.java +206 -0
  32. package/ark-control/src/main/java/com/union/control/service/impl/AgentExecutionServiceImpl.java +212 -0
  33. package/ark-control/src/main/java/com/union/control/service/impl/AgentProxyServiceImpl.java +143 -0
  34. package/ark-control/src/main/java/com/union/control/service/impl/ConversationServiceImpl.java +245 -0
  35. package/ark-control/src/main/java/com/union/control/service/impl/MemoryStoreServiceImpl.java +252 -0
  36. package/ark-control/src/main/java/com/union/control/service/impl/RunningAnalysisMockServiceImpl.java +301 -0
  37. package/ark-control/src/main/java/com/union/control/service/impl/ScheduledTaskServiceImpl.java +576 -0
  38. package/ark-control/src/main/java/com/union/control/service/impl/SensitiveDataDemoServiceImpl.java +144 -0
  39. package/ark-control/src/main/java/com/union/control/service/sensitive/RedisRevealTokenStore.java +90 -0
  40. package/ark-control/src/main/java/com/union/control/service/sensitive/SensitiveRevealProcessor.java +319 -0
  41. package/ark-control/src/main/java/com/union/control/service/sensitive/SensitiveRevealServiceImpl.java +72 -0
  42. package/ark-control/src/main/java/com/union/control/utils/AgentSupport.java +103 -0
  43. package/ark-control/src/main/java/com/union/control/utils/security/SymmetricalSecurityUtils.java +160 -0
  44. package/ark-control/src/main/resources/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter +1 -0
  45. package/ark-control/src/main/resources/application.properties +4 -0
  46. package/ark-control/src/main/resources/application.yml +32 -0
  47. package/ark-control/src/main/resources/dubbo-provider.xml +20 -0
  48. package/ark-control/src/main/resources/mapper/AgentExecutionMapper.xml +75 -0
  49. package/ark-control/src/main/resources/mapper/ConversationMapper.xml +110 -0
  50. package/ark-control/src/main/resources/mapper/MemoryStoreMapper.xml +74 -0
  51. package/ark-control/src/main/resources/mapper/ScheduledTaskMapper.xml +286 -0
  52. package/ark-control/src/main/resources/mapper/SensitiveDataDemoMapper.xml +55 -0
  53. package/ark-control/src/main/resources/schema.sql +146 -0
  54. package/ark-control/src/test/java/com/union/control/AgentExecutionServiceTest.java +170 -0
  55. package/ark-control/src/test/java/com/union/control/ArkControlStructureContractTest.java +107 -0
  56. package/ark-control/src/test/java/com/union/control/ConversationServiceTest.java +89 -0
  57. package/ark-control/src/test/java/com/union/control/MemoryStoreServiceTest.java +26 -0
  58. package/ark-control/src/test/java/com/union/control/PydanticAiControlContractTest.java +52 -0
  59. package/ark-control/src/test/java/com/union/control/TestJson.java +45 -0
  60. package/ark-control/src/test/java/com/union/control/dubbo/ProviderAccessLogFilterTest.java +53 -0
  61. package/ark-control/src/test/java/com/union/control/local/sensitive/LocalSensitiveProxyConfigurationTest.java +23 -0
  62. package/ark-control/src/test/java/com/union/control/mapper/interceptor/AESInterceptorCompatibilityTest.java +505 -0
  63. package/ark-control/src/test/java/com/union/control/schedule/ScheduledExecutionTokenTest.java +27 -0
  64. package/ark-control/src/test/java/com/union/control/schedule/ScheduledTaskSchedulerTest.java +51 -0
  65. package/ark-control/src/test/java/com/union/control/service/AgentProxyServiceTest.java +111 -0
  66. package/ark-control/src/test/java/com/union/control/service/ScheduledTaskServiceTest.java +483 -0
  67. package/ark-control/src/test/java/com/union/control/service/impl/SensitiveDataDemoServiceImplTest.java +104 -0
  68. package/ark-control/src/test/java/com/union/control/service/sensitive/RedisRevealTokenStoreTest.java +65 -0
  69. package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealBoundaryTest.java +99 -0
  70. package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealProcessorCodecTest.java +111 -0
  71. package/ark-control/src/test/java/com/union/control/service/sensitive/SensitiveRevealProcessorTest.java +111 -0
  72. package/ark-control/src/test/java/com/union/control/utils/security/SymmetricalSecurityUtilsCompatibilityTest.java +87 -0
  73. package/ark-control-facade/pom.xml +16 -0
  74. package/ark-control-facade/src/main/java/com/union/control/service/AgentExecutionService.java +8 -0
  75. package/ark-control-facade/src/main/java/com/union/control/service/AgentProxyService.java +7 -0
  76. package/ark-control-facade/src/main/java/com/union/control/service/AgentResponse.java +22 -0
  77. package/ark-control-facade/src/main/java/com/union/control/service/ConversationService.java +12 -0
  78. package/ark-control-facade/src/main/java/com/union/control/service/MemoryStoreService.java +12 -0
  79. package/ark-control-facade/src/main/java/com/union/control/service/RunningAnalysisMockService.java +10 -0
  80. package/ark-control-facade/src/main/java/com/union/control/service/ScheduledTaskService.java +40 -0
  81. package/ark-control-facade/src/main/java/com/union/control/service/SensitiveDataDemoService.java +13 -0
  82. package/ark-control-facade/src/main/java/com/union/control/service/sensitive/SensitiveRevealService.java +18 -0
  83. package/ark-web/README.md +80 -0
  84. package/ark-web/pom.xml +105 -0
  85. package/ark-web/src/local-mock/java/com/epcc/arkweb/mock/ArkAuthServiceMock.java +105 -0
  86. package/ark-web/src/local-mock/java/com/epcc/arkweb/mock/LocalKaptchaConfiguration.java +26 -0
  87. package/ark-web/src/main/java/com/epcc/arkweb/Application.java +13 -0
  88. package/ark-web/src/main/java/com/epcc/arkweb/config/InterceptorConfig.java +20 -0
  89. package/ark-web/src/main/java/com/epcc/arkweb/config/Realm.java +64 -0
  90. package/ark-web/src/main/java/com/epcc/arkweb/config/ShiroConfig.java +129 -0
  91. package/ark-web/src/main/java/com/epcc/arkweb/filter/LoginFormFilter.java +43 -0
  92. package/ark-web/src/main/java/com/epcc/arkweb/helper/AuthContextHolder.java +39 -0
  93. package/ark-web/src/main/java/com/epcc/arkweb/helper/AuthenticatedRequest.java +91 -0
  94. package/ark-web/src/main/java/com/epcc/arkweb/model/ShiroUser.java +21 -0
  95. package/ark-web/src/main/java/com/epcc/arkweb/utils/ResultMsg.java +19 -0
  96. package/ark-web/src/main/java/com/epcc/arkweb/vo/llm/ScheduledTaskCommandVO.java +30 -0
  97. package/ark-web/src/main/java/com/epcc/arkweb/vo/llm/ScheduledTaskQueryVO.java +20 -0
  98. package/ark-web/src/main/java/com/epcc/arkweb/web/CommonController.java +25 -0
  99. package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentAuthorizationInterceptor.java +229 -0
  100. package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentController.java +165 -0
  101. package/ark-web/src/main/java/com/epcc/arkweb/web/llm/AgentPermission.java +13 -0
  102. package/ark-web/src/main/java/com/epcc/arkweb/web/llm/LlmController.java +209 -0
  103. package/ark-web/src/main/java/com/epcc/arkweb/web/llm/ScheduledTaskController.java +160 -0
  104. package/ark-web/src/main/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveCaptchaService.java +146 -0
  105. package/ark-web/src/main/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveRevealController.java +163 -0
  106. package/ark-web/src/main/resources/application.properties +1 -0
  107. package/ark-web/src/main/resources/application.yml +23 -0
  108. package/ark-web/src/main/resources/dubbo-consumer.xml +19 -0
  109. package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/CasShiroConfig.java +229 -0
  110. package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/InterceptorConfig.java +35 -0
  111. package/ark-web/src/production-overlay/java/com/epcc/arkweb/config/ShiroConfig.java +161 -0
  112. package/ark-web/src/test/java/com/epcc/arkweb/ArkWebStructureContractTest.java +290 -0
  113. package/ark-web/src/test/java/com/epcc/arkweb/ShiroTestSupport.java +32 -0
  114. package/ark-web/src/test/java/com/epcc/arkweb/config/LocalShiroIntegrationTest.java +121 -0
  115. package/ark-web/src/test/java/com/epcc/arkweb/helper/AuthenticatedRequestTest.java +131 -0
  116. package/ark-web/src/test/java/com/epcc/arkweb/local/LocalArkAuthServiceMockTest.java +17 -0
  117. package/ark-web/src/test/java/com/epcc/arkweb/web/llm/AgentAuthorizationInterceptorTest.java +134 -0
  118. package/ark-web/src/test/java/com/epcc/arkweb/web/llm/AgentControllerAuthorizationTest.java +97 -0
  119. package/ark-web/src/test/java/com/epcc/arkweb/web/llm/LlmControllerTest.java +113 -0
  120. package/ark-web/src/test/java/com/epcc/arkweb/web/sensitive/reveal/SensitiveRevealControllerTest.java +273 -0
  121. package/package.json +18 -0
  122. 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
+ }