|
@@ -1,177 +1,177 @@
|
|
-package com.mooctest.crowd.site.configuration;
|
|
|
|
-
|
|
|
|
-import org.apache.shiro.cache.ehcache.EhCacheManager;
|
|
|
|
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
|
|
|
|
-import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
|
|
|
|
-import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
|
|
|
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
|
|
-import org.springframework.context.annotation.Bean;
|
|
|
|
-import org.springframework.context.annotation.Configuration;
|
|
|
|
-import org.springframework.context.annotation.DependsOn;
|
|
|
|
-
|
|
|
|
-/**
|
|
|
|
- * Shiro configuration
|
|
|
|
- * Created by Liu on 2017/6/6.
|
|
|
|
- */
|
|
|
|
-@Configuration
|
|
|
|
-public class ShiroConfiguration {
|
|
|
|
- /**
|
|
|
|
- * LifecycleBeanPostProcessor,这是个DestructionAwareBeanPostProcessor的子类,
|
|
|
|
- * 负责org.apache.shiro.util.Initializable类型bean的生命周期的,初始化和销毁。
|
|
|
|
- * 主要是AuthorizingRealm类的子类,以及EhCacheManager类。
|
|
|
|
- */
|
|
|
|
- @Bean(name = "lifecycleBeanPostProcessor")
|
|
|
|
- public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
|
|
|
|
- return new LifecycleBeanPostProcessor();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * ShiroRealm,这是个自定义的认证类,继承自AuthorizingRealm,
|
|
|
|
- * 负责用户的认证和权限的处理,可以参考JdbcRealm的实现。
|
|
|
|
- */
|
|
|
|
-// @ConditionalOnProperty(prefix = "featureSwitch", name = "client.loginByUserCenter", matchIfMissing = false)
|
|
|
|
-// @Bean(name = "shiroRealm")
|
|
|
|
-// @DependsOn("lifecycleBeanPostProcessor")
|
|
|
|
-// public ShiroRealmAdapt2UserCenter shiroRealmAdapt2UserCenter() {
|
|
|
|
-// // System.out.println("\nCreate ShiroRealm Adapt to UserCenter\n");
|
|
|
|
-// ShiroRealmAdapt2UserCenter realm = new ShiroRealmAdapt2UserCenter();
|
|
|
|
-// return realm;
|
|
|
|
|
|
+//package com.mooctest.crowd.site.configuration;
|
|
|
|
+//
|
|
|
|
+//import org.apache.shiro.cache.ehcache.EhCacheManager;
|
|
|
|
+//import org.apache.shiro.spring.LifecycleBeanPostProcessor;
|
|
|
|
+//import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
|
|
|
|
+//import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
|
|
|
|
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
|
|
|
+//import org.springframework.context.annotation.Bean;
|
|
|
|
+//import org.springframework.context.annotation.Configuration;
|
|
|
|
+//import org.springframework.context.annotation.DependsOn;
|
|
|
|
+//
|
|
|
|
+///**
|
|
|
|
+// * Shiro configuration
|
|
|
|
+// * Created by Liu on 2017/6/6.
|
|
|
|
+// */
|
|
|
|
+//@Configuration
|
|
|
|
+//public class ShiroConfiguration {
|
|
|
|
+// /**
|
|
|
|
+// * LifecycleBeanPostProcessor,这是个DestructionAwareBeanPostProcessor的子类,
|
|
|
|
+// * 负责org.apache.shiro.util.Initializable类型bean的生命周期的,初始化和销毁。
|
|
|
|
+// * 主要是AuthorizingRealm类的子类,以及EhCacheManager类。
|
|
|
|
+// */
|
|
|
|
+// @Bean(name = "lifecycleBeanPostProcessor")
|
|
|
|
+// public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
|
|
|
|
+// return new LifecycleBeanPostProcessor();
|
|
// }
|
|
// }
|
|
//
|
|
//
|
|
-// @Bean(name = "shiroRealm")
|
|
|
|
|
|
+// /**
|
|
|
|
+// * ShiroRealm,这是个自定义的认证类,继承自AuthorizingRealm,
|
|
|
|
+// * 负责用户的认证和权限的处理,可以参考JdbcRealm的实现。
|
|
|
|
+// */
|
|
|
|
+//// @ConditionalOnProperty(prefix = "featureSwitch", name = "client.loginByUserCenter", matchIfMissing = false)
|
|
|
|
+//// @Bean(name = "shiroRealm")
|
|
|
|
+//// @DependsOn("lifecycleBeanPostProcessor")
|
|
|
|
+//// public ShiroRealmAdapt2UserCenter shiroRealmAdapt2UserCenter() {
|
|
|
|
+//// // System.out.println("\nCreate ShiroRealm Adapt to UserCenter\n");
|
|
|
|
+//// ShiroRealmAdapt2UserCenter realm = new ShiroRealmAdapt2UserCenter();
|
|
|
|
+//// return realm;
|
|
|
|
+//// }
|
|
|
|
+////
|
|
|
|
+//// @Bean(name = "shiroRealm")
|
|
|
|
+//// @DependsOn("lifecycleBeanPostProcessor")
|
|
|
|
+//// public ShiroRealm shiroRealm() {
|
|
|
|
+//// // System.out.println("\nCreate ShiroRealm don't Adapt to UserCenter\n");
|
|
|
|
+//// ShiroRealm realm = new ShiroRealm();
|
|
|
|
+//// return realm;
|
|
|
|
+//// }
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * EhCacheManager,缓存管理,用户登陆成功后,把用户信息和权限信息缓存起来,
|
|
|
|
+// * 然后每次用户请求时,放入用户的session中,如果不设置这个bean,每个请求都会查询一次数据库。
|
|
|
|
+// */
|
|
|
|
+// @Bean(name = "ehCacheManager")
|
|
// @DependsOn("lifecycleBeanPostProcessor")
|
|
// @DependsOn("lifecycleBeanPostProcessor")
|
|
-// public ShiroRealm shiroRealm() {
|
|
|
|
-// // System.out.println("\nCreate ShiroRealm don't Adapt to UserCenter\n");
|
|
|
|
-// ShiroRealm realm = new ShiroRealm();
|
|
|
|
-// return realm;
|
|
|
|
|
|
+// public EhCacheManager ehCacheManager() {
|
|
|
|
+// return new EhCacheManager();
|
|
// }
|
|
// }
|
|
-
|
|
|
|
- /**
|
|
|
|
- * EhCacheManager,缓存管理,用户登陆成功后,把用户信息和权限信息缓存起来,
|
|
|
|
- * 然后每次用户请求时,放入用户的session中,如果不设置这个bean,每个请求都会查询一次数据库。
|
|
|
|
- */
|
|
|
|
- @Bean(name = "ehCacheManager")
|
|
|
|
- @DependsOn("lifecycleBeanPostProcessor")
|
|
|
|
- public EhCacheManager ehCacheManager() {
|
|
|
|
- return new EhCacheManager();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * SecurityManager,权限管理,这个类组合了登陆,登出,权限,session的处理,是个比较重要的类。
|
|
|
|
- */
|
|
|
|
-// @Bean(name = "securityManager")
|
|
|
|
-// public DefaultWebSecurityManager securityManager(AuthorizingRealm shiroRealm) {
|
|
|
|
-// DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
|
|
|
-// securityManager.setRealm(shiroRealm);
|
|
|
|
-// securityManager.setCacheManager(ehCacheManager());
|
|
|
|
-// //securityManager.setSessionManager(defaultWebSessionManager());
|
|
|
|
//
|
|
//
|
|
-// return securityManager;
|
|
|
|
|
|
+// /**
|
|
|
|
+// * SecurityManager,权限管理,这个类组合了登陆,登出,权限,session的处理,是个比较重要的类。
|
|
|
|
+// */
|
|
|
|
+//// @Bean(name = "securityManager")
|
|
|
|
+//// public DefaultWebSecurityManager securityManager(AuthorizingRealm shiroRealm) {
|
|
|
|
+//// DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
|
|
|
|
+//// securityManager.setRealm(shiroRealm);
|
|
|
|
+//// securityManager.setCacheManager(ehCacheManager());
|
|
|
|
+//// //securityManager.setSessionManager(defaultWebSessionManager());
|
|
|
|
+////
|
|
|
|
+//// return securityManager;
|
|
|
|
+//// }
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。
|
|
|
|
+// * 它主要保持了三项数据,securityManager,filters,filterChainDefinitionManager。
|
|
|
|
+// */
|
|
|
|
+//// @Bean(name = "shiroFilter")
|
|
|
|
+//// public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
|
|
|
|
+//// ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
|
|
|
+//// shiroFilterFactoryBean.setSecurityManager(securityManager);
|
|
|
|
+////
|
|
|
|
+//// Map<String, Filter> filters = new LinkedHashMap<>();
|
|
|
|
+//// filters.put("authc", new MyAuthorizationFilter());
|
|
|
|
+//// shiroFilterFactoryBean.setFilters(filters);
|
|
|
|
+////
|
|
|
|
+//// Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/api/cookie/set", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/test/login", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/test/register", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/featureSwitch", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/ossConfiguration","anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/common/tag/**", "authc");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/common/**", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/mobileLogin", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/case/nodeList", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/exam/**/info","anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/payEmail", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/product/send", "anon");
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/logout", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/dev/**", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/kibug/plugin/**", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/wechat/**", "anon");
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/api/pythonCommunity/exercise/**", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/pythonCommunity/statistic/**", "authc");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/support/**", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/evaluation/**", "authc");
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/api/onlinejudge/**","anon");
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/api/codeVisualize/**", "anon");
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/api/onlinejudge/u/**","authc");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/sendGetHelpEmail", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/**", "authc");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/caseExport", "anon");
|
|
|
|
+//// filterChainDefinitionManager.put("/api/caseImport", "anon");
|
|
|
|
+////
|
|
|
|
+//// filterChainDefinitionManager.put("/api/contest/enterWithoutLogin/**", "anon");
|
|
|
|
+////
|
|
|
|
+////
|
|
|
|
+////
|
|
|
|
+////
|
|
|
|
+//// shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);
|
|
|
|
+////
|
|
|
|
+//// shiroFilterFactoryBean.setSuccessUrl("/");
|
|
|
|
+//// shiroFilterFactoryBean.setLoginUrl("/");
|
|
|
|
+//// shiroFilterFactoryBean.setUnauthorizedUrl("");
|
|
|
|
+//// return shiroFilterFactoryBean;
|
|
|
|
+//// }
|
|
|
|
+//
|
|
|
|
+// /**
|
|
|
|
+// * DefaultAdvisorAutoProxyCreator,Spring的一个bean,由Advisor决定对哪些类的方法进行AOP代理。
|
|
|
|
+// */
|
|
|
|
+// @Bean
|
|
|
|
+// @ConditionalOnMissingBean
|
|
|
|
+// public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
|
|
|
|
+// DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
|
|
|
|
+// defaultAAP.setProxyTargetClass(true);
|
|
|
|
+// return defaultAAP;
|
|
// }
|
|
// }
|
|
-
|
|
|
|
- /**
|
|
|
|
- * ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。
|
|
|
|
- * 它主要保持了三项数据,securityManager,filters,filterChainDefinitionManager。
|
|
|
|
- */
|
|
|
|
-// @Bean(name = "shiroFilter")
|
|
|
|
-// public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
|
|
|
|
-// ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
|
|
|
|
-// shiroFilterFactoryBean.setSecurityManager(securityManager);
|
|
|
|
-//
|
|
|
|
-// Map<String, Filter> filters = new LinkedHashMap<>();
|
|
|
|
-// filters.put("authc", new MyAuthorizationFilter());
|
|
|
|
-// shiroFilterFactoryBean.setFilters(filters);
|
|
|
|
-//
|
|
|
|
-// Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/api/cookie/set", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/test/login", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/test/register", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/featureSwitch", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/ossConfiguration","anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/common/tag/**", "authc");
|
|
|
|
-// filterChainDefinitionManager.put("/api/common/**", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/mobileLogin", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/case/nodeList", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/exam/**/info","anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/payEmail", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/product/send", "anon");
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/logout", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/dev/**", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/kibug/plugin/**", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/wechat/**", "anon");
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/api/pythonCommunity/exercise/**", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/pythonCommunity/statistic/**", "authc");
|
|
|
|
-// filterChainDefinitionManager.put("/api/support/**", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/evaluation/**", "authc");
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/api/onlinejudge/**","anon");
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/api/codeVisualize/**", "anon");
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/api/onlinejudge/u/**","authc");
|
|
|
|
-// filterChainDefinitionManager.put("/api/sendGetHelpEmail", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/**", "authc");
|
|
|
|
-// filterChainDefinitionManager.put("/api/caseExport", "anon");
|
|
|
|
-// filterChainDefinitionManager.put("/api/caseImport", "anon");
|
|
|
|
-//
|
|
|
|
-// filterChainDefinitionManager.put("/api/contest/enterWithoutLogin/**", "anon");
|
|
|
|
-//
|
|
|
|
//
|
|
//
|
|
|
|
+// /**
|
|
|
|
+// * AuthorizationAttributeSourceAdvisor,shiro里实现的Advisor类,
|
|
|
|
+// * 内部使用AopAllianceAnnotationsAuthorizingMethodInterceptor来拦截用以下注解的方法。
|
|
|
|
+// */
|
|
|
|
+//// @Bean
|
|
|
|
+//// public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
|
|
|
|
+//// AuthorizationAttributeSourceAdvisor aASA = new AuthorizationAttributeSourceAdvisor();
|
|
|
|
+//// aASA.setSecurityManager(securityManager);
|
|
|
|
+//// return aASA;
|
|
|
|
+//// }
|
|
|
|
+//
|
|
|
|
+//// @Bean(name = "sessionDao")
|
|
|
|
+//// public MySessionDao sessionDao() {
|
|
|
|
+//// MySessionDao sessionDao = new MySessionDao();
|
|
|
|
+//// sessionDao.setSessionIdGenerator(new JavaUuidSessionIdGenerator());
|
|
|
|
+////// sessionDao.setSessionIdGenerator(JavaUuidSessionIdGenerator);
|
|
|
|
+//// return sessionDao;
|
|
|
|
+//// }
|
|
|
|
+//
|
|
|
|
+// @Bean(name = "sessionManager")
|
|
|
|
+// public DefaultWebSessionManager defaultWebSessionManager() {
|
|
|
|
+// DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
|
|
|
|
+// sessionManager.setCacheManager(ehCacheManager());
|
|
|
|
+// sessionManager.setGlobalSessionTimeout(1800000);//超时时间
|
|
|
|
+// sessionManager.setSessionValidationSchedulerEnabled(true);//定时清除无效的session
|
|
|
|
+// sessionManager.setSessionValidationInterval(1800000);//半个小时清理一次失效的session
|
|
|
|
+// sessionManager.setDeleteInvalidSessions(true);//删除无效的session
|
|
|
|
+//// sessionManager.setSessionDAO(sessionDao());
|
|
|
|
+// return sessionManager;
|
|
|
|
+// }
|
|
//
|
|
//
|
|
|
|
+//}
|
|
//
|
|
//
|
|
-// shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);
|
|
|
|
//
|
|
//
|
|
-// shiroFilterFactoryBean.setSuccessUrl("/");
|
|
|
|
-// shiroFilterFactoryBean.setLoginUrl("/");
|
|
|
|
-// shiroFilterFactoryBean.setUnauthorizedUrl("");
|
|
|
|
-// return shiroFilterFactoryBean;
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * DefaultAdvisorAutoProxyCreator,Spring的一个bean,由Advisor决定对哪些类的方法进行AOP代理。
|
|
|
|
- */
|
|
|
|
- @Bean
|
|
|
|
- @ConditionalOnMissingBean
|
|
|
|
- public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
|
|
|
|
- DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
|
|
|
|
- defaultAAP.setProxyTargetClass(true);
|
|
|
|
- return defaultAAP;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- /**
|
|
|
|
- * AuthorizationAttributeSourceAdvisor,shiro里实现的Advisor类,
|
|
|
|
- * 内部使用AopAllianceAnnotationsAuthorizingMethodInterceptor来拦截用以下注解的方法。
|
|
|
|
- */
|
|
|
|
-// @Bean
|
|
|
|
-// public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
|
|
|
|
-// AuthorizationAttributeSourceAdvisor aASA = new AuthorizationAttributeSourceAdvisor();
|
|
|
|
-// aASA.setSecurityManager(securityManager);
|
|
|
|
-// return aASA;
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
-// @Bean(name = "sessionDao")
|
|
|
|
-// public MySessionDao sessionDao() {
|
|
|
|
-// MySessionDao sessionDao = new MySessionDao();
|
|
|
|
-// sessionDao.setSessionIdGenerator(new JavaUuidSessionIdGenerator());
|
|
|
|
-//// sessionDao.setSessionIdGenerator(JavaUuidSessionIdGenerator);
|
|
|
|
-// return sessionDao;
|
|
|
|
-// }
|
|
|
|
-
|
|
|
|
- @Bean(name = "sessionManager")
|
|
|
|
- public DefaultWebSessionManager defaultWebSessionManager() {
|
|
|
|
- DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
|
|
|
|
- sessionManager.setCacheManager(ehCacheManager());
|
|
|
|
- sessionManager.setGlobalSessionTimeout(1800000);//超时时间
|
|
|
|
- sessionManager.setSessionValidationSchedulerEnabled(true);//定时清除无效的session
|
|
|
|
- sessionManager.setSessionValidationInterval(1800000);//半个小时清理一次失效的session
|
|
|
|
- sessionManager.setDeleteInvalidSessions(true);//删除无效的session
|
|
|
|
-// sessionManager.setSessionDAO(sessionDao());
|
|
|
|
- return sessionManager;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-
|
|
|