|
@@ -28,20 +28,20 @@ import java.util.Map;
|
|
|
@Configuration
|
|
|
public class ShiroConfig {
|
|
|
|
|
|
- /**
|
|
|
- * Filter Chain定义说明
|
|
|
- *
|
|
|
- * 1、一个URL可以配置多个Filter,使用逗号分隔
|
|
|
- * 2、当设置多个过滤器时,全部验证通过,才视为通过
|
|
|
- * 3、部分过滤器可指定参数,如perms,roles
|
|
|
- */
|
|
|
- @Bean("shiroFilter")
|
|
|
- public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
|
|
|
- ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
|
|
- shiroFilterFactoryBean.setSecurityManager(securityManager);
|
|
|
- // 拦截器
|
|
|
- Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
|
|
|
- // 配置不会被拦截的链接 顺序判断
|
|
|
+ /**
|
|
|
+ * Filter Chain定义说明
|
|
|
+ * <p>
|
|
|
+ * 1、一个URL可以配置多个Filter,使用逗号分隔
|
|
|
+ * 2、当设置多个过滤器时,全部验证通过,才视为通过
|
|
|
+ * 3、部分过滤器可指定参数,如perms,roles
|
|
|
+ */
|
|
|
+ @Bean("shiroFilter")
|
|
|
+ public ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) {
|
|
|
+ ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
|
|
+ shiroFilterFactoryBean.setSecurityManager(securityManager);
|
|
|
+ // 拦截器
|
|
|
+ Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
|
|
|
+ // 配置不会被拦截的链接 顺序判断
|
|
|
//登录接口排除
|
|
|
filterChainDefinitionMap.put("/sys/login", "anon");
|
|
|
|
|
@@ -69,122 +69,123 @@ public class ShiroConfig {
|
|
|
filterChainDefinitionMap.put("/sys/common/download/**", "anon");
|
|
|
//pdf预览
|
|
|
filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/ctop/bytedanceAreaInfo/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/template/creative/words/get", "anon");
|
|
|
+ filterChainDefinitionMap.put("/ctop/bytedanceAreaInfo/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/ctop/bytedanceInterestCategory/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/template/creative/words/get", "anon");
|
|
|
filterChainDefinitionMap.put("/appium/crawler/startJob", "anon");
|
|
|
|
|
|
filterChainDefinitionMap.put("/generic/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/", "anon");
|
|
|
- filterChainDefinitionMap.put("/doc.html", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.js", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.css", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.html", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.svg", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.jpg", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.png", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.ico", "anon");
|
|
|
- filterChainDefinitionMap.put("/druid/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/swagger-ui.html", "anon");
|
|
|
- filterChainDefinitionMap.put("/swagger**/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/webjars/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/v2/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/", "anon");
|
|
|
+ filterChainDefinitionMap.put("/doc.html", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.js", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.css", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.html", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.svg", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.jpg", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.png", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.ico", "anon");
|
|
|
+ filterChainDefinitionMap.put("/druid/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/swagger-ui.html", "anon");
|
|
|
+ filterChainDefinitionMap.put("/swagger**/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/webjars/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/v2/**", "anon");
|
|
|
filterChainDefinitionMap.put("/kuaishou", "anon");
|
|
|
filterChainDefinitionMap.put("/kuaishou/report", "anon");
|
|
|
- filterChainDefinitionMap.put("/ctop/bindAccount/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/**/*.mp4", "anon");
|
|
|
+ filterChainDefinitionMap.put("/ctop/bindAccount/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/**/*.mp4", "anon");
|
|
|
|
|
|
|
|
|
- //性能监控
|
|
|
- filterChainDefinitionMap.put("/actuator/metrics/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/actuator/httptrace/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/actuator/redis/**", "anon");
|
|
|
+ //性能监控
|
|
|
+ filterChainDefinitionMap.put("/actuator/metrics/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/actuator/httptrace/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/actuator/redis/**", "anon");
|
|
|
//消息队列
|
|
|
filterChainDefinitionMap.put("/mq/**", "anon");
|
|
|
//模板测试
|
|
|
filterChainDefinitionMap.put("/test/**", "anon");
|
|
|
- //oauth接口
|
|
|
+ //oauth接口
|
|
|
filterChainDefinitionMap.put("/auth/**", "anon");
|
|
|
- filterChainDefinitionMap.put("/ctop/syncdata/**", "anon");
|
|
|
- //头条接口
|
|
|
+ filterChainDefinitionMap.put("/ctop/syncdata/**", "anon");
|
|
|
+ //头条接口
|
|
|
filterChainDefinitionMap.put("/bytedance", "anon");
|
|
|
- filterChainDefinitionMap.put("/toutiao/dictitem/list", "anon");
|
|
|
+ filterChainDefinitionMap.put("/toutiao/dictitem/list", "anon");
|
|
|
filterChainDefinitionMap.put("/toutiao/loadAllData", "anon");
|
|
|
filterChainDefinitionMap.put("/toutiao/loadSingleData", "anon");
|
|
|
- filterChainDefinitionMap.put("/kuaishou/getReport/historyData", "anon");
|
|
|
- filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/kuaishou/getReport/historyData", "anon");
|
|
|
+ filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
|
|
|
filterChainDefinitionMap.put("/toutiao/industry/list", "anon");
|
|
|
filterChainDefinitionMap.put("/template/bytedance/industry/list", "anon");
|
|
|
filterChainDefinitionMap.put("/template/convert/list", "anon");
|
|
|
- filterChainDefinitionMap.put("/template/convert/list/url", "anon");
|
|
|
+ filterChainDefinitionMap.put("/template/convert/list/url", "anon");
|
|
|
//文件上传接口
|
|
|
- filterChainDefinitionMap.put("/upload/**", "anon");
|
|
|
+ filterChainDefinitionMap.put("/upload/**", "anon");
|
|
|
filterChainDefinitionMap.put("/appium/appiumTask/run", "anon");
|
|
|
|
|
|
|
|
|
filterChainDefinitionMap.put("/system/userCompany/**", "anon");
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- filterChainDefinitionMap.put("/appium/appiumTask/run/login", "anon");
|
|
|
- //爬虫接口
|
|
|
- filterChainDefinitionMap.put("/graphql/video", "anon");
|
|
|
- filterChainDefinitionMap.put("/ks/web/test", "anon");
|
|
|
- // 添加自己的过滤器并且取名为jwt
|
|
|
- Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
|
|
|
- filterMap.put("jwt", new JwtFilter());
|
|
|
- shiroFilterFactoryBean.setFilters(filterMap);
|
|
|
- // <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
|
|
|
- filterChainDefinitionMap.put("/**", "jwt");
|
|
|
-
|
|
|
- // 未授权界面返回JSON
|
|
|
- shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403");
|
|
|
- shiroFilterFactoryBean.setLoginUrl("/sys/common/403");
|
|
|
- shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
|
|
|
- return shiroFilterFactoryBean;
|
|
|
- }
|
|
|
-
|
|
|
- @Bean("securityManager")
|
|
|
- public DefaultWebSecurityManager securityManager(ShiroRealm myRealm) {
|
|
|
- DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
|
|
- securityManager.setRealm(myRealm);
|
|
|
-
|
|
|
- /*
|
|
|
- * 关闭shiro自带的session,详情见文档
|
|
|
- * http://shiro.apache.org/session-management.html#SessionManagement-
|
|
|
- * StatelessApplications%28Sessionless%29
|
|
|
- */
|
|
|
- DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
|
|
|
- DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
|
|
|
- defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
|
|
|
- subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
|
|
|
- securityManager.setSubjectDAO(subjectDAO);
|
|
|
-
|
|
|
- return securityManager;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 下面的代码是添加注解支持
|
|
|
- * @return
|
|
|
- */
|
|
|
- @Bean
|
|
|
- @DependsOn("lifecycleBeanPostProcessor")
|
|
|
- public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
|
|
|
- DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
|
|
|
- defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
|
|
|
- return defaultAdvisorAutoProxyCreator;
|
|
|
- }
|
|
|
-
|
|
|
- @Bean
|
|
|
- public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
|
|
|
- return new LifecycleBeanPostProcessor();
|
|
|
- }
|
|
|
-
|
|
|
- @Bean
|
|
|
- public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
|
|
|
- AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
|
|
|
- advisor.setSecurityManager(securityManager);
|
|
|
- return advisor;
|
|
|
- }
|
|
|
+ filterChainDefinitionMap.put("/test/getGroupData/**", "anon");
|
|
|
+
|
|
|
+
|
|
|
+ filterChainDefinitionMap.put("/appium/appiumTask/run/login", "anon");
|
|
|
+ //爬虫接口
|
|
|
+ filterChainDefinitionMap.put("/graphql/video", "anon");
|
|
|
+ filterChainDefinitionMap.put("/ks/web/test", "anon");
|
|
|
+ // 添加自己的过滤器并且取名为jwt
|
|
|
+ Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
|
|
|
+ filterMap.put("jwt", new JwtFilter());
|
|
|
+ shiroFilterFactoryBean.setFilters(filterMap);
|
|
|
+ // <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
|
|
|
+ filterChainDefinitionMap.put("/**", "jwt");
|
|
|
+
|
|
|
+ // 未授权界面返回JSON
|
|
|
+ shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403");
|
|
|
+ shiroFilterFactoryBean.setLoginUrl("/sys/common/403");
|
|
|
+ shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
|
|
|
+ return shiroFilterFactoryBean;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean("securityManager")
|
|
|
+ public DefaultWebSecurityManager securityManager(ShiroRealm myRealm) {
|
|
|
+ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
|
|
+ securityManager.setRealm(myRealm);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * 关闭shiro自带的session,详情见文档
|
|
|
+ * http://shiro.apache.org/session-management.html#SessionManagement-
|
|
|
+ * StatelessApplications%28Sessionless%29
|
|
|
+ */
|
|
|
+ DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
|
|
|
+ DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
|
|
|
+ defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
|
|
|
+ subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
|
|
|
+ securityManager.setSubjectDAO(subjectDAO);
|
|
|
+
|
|
|
+ return securityManager;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 下面的代码是添加注解支持
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Bean
|
|
|
+ @DependsOn("lifecycleBeanPostProcessor")
|
|
|
+ public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
|
|
|
+ DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
|
|
|
+ defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
|
|
|
+ return defaultAdvisorAutoProxyCreator;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
|
|
|
+ return new LifecycleBeanPostProcessor();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {
|
|
|
+ AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
|
|
|
+ advisor.setSecurityManager(securityManager);
|
|
|
+ return advisor;
|
|
|
+ }
|
|
|
|
|
|
}
|