ShiroConfig.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. package com.ygj.yuemum.shiro;
  2. import com.ygj.yuemum.service.admin.JlAdminUserService;
  3. import com.ygj.yuemum.shiro.sso.JWTAuthFilter;
  4. import com.ygj.yuemum.shiro.sso.JWTShiroRealm;
  5. import org.apache.shiro.authc.Authenticator;
  6. import org.apache.shiro.authc.pam.FirstSuccessfulStrategy;
  7. import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
  8. import org.apache.shiro.mgt.SecurityManager;
  9. import org.apache.shiro.realm.Realm;
  10. import org.apache.shiro.session.mgt.SessionManager;
  11. import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
  12. import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
  13. import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.context.annotation.Bean;
  16. import org.springframework.context.annotation.Configuration;
  17. import javax.servlet.Filter;
  18. import java.util.Arrays;
  19. import java.util.LinkedHashMap;
  20. import java.util.Map;
  21. @Configuration
  22. public class ShiroConfig {
  23. @Autowired
  24. private JlAdminUserService jlAdminUserService;
  25. @Bean
  26. public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
  27. ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
  28. // 必须设置 SecurityManager
  29. shiroFilterFactoryBean.setSecurityManager(securityManager);
  30. Map<String, Filter> filterMap = shiroFilterFactoryBean.getFilters();
  31. filterMap.put("authcToken", createAuthFilter(jlAdminUserService));
  32. shiroFilterFactoryBean.setFilters(filterMap);
  33. // setLoginUrl 如果不设置值,默认会自动寻找Web工程根目录下的"/login.jsp"页面 或 "/login" 映射
  34. shiroFilterFactoryBean.setLoginUrl("/webLogin");
  35. // 设置无权限时跳转的 url;
  36. shiroFilterFactoryBean.setUnauthorizedUrl("/unauth");
  37. // 设置拦截器
  38. Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
  39. //小程序开放权限
  40. filterChainDefinitionMap.put("/addEquipmenteHireDetail", "anon");
  41. filterChainDefinitionMap.put("/addEquipmenteHireHeadOnline", "anon");
  42. filterChainDefinitionMap.put("/deleteEquipmenteHireHead", "anon");
  43. filterChainDefinitionMap.put("/deleteWXUserDefAddress", "anon");
  44. filterChainDefinitionMap.put("/checkStockDate", "anon");
  45. filterChainDefinitionMap.put("/getBanners", "anon");
  46. filterChainDefinitionMap.put("/getConsultant", "anon");
  47. filterChainDefinitionMap.put("/getCustomerEq", "anon");
  48. filterChainDefinitionMap.put("/getEquipmentTypes", "anon");
  49. filterChainDefinitionMap.put("/getEqUserAddress", "anon");
  50. filterChainDefinitionMap.put("/getIndexs", "anon");
  51. filterChainDefinitionMap.put("/getMktInfos", "anon");
  52. filterChainDefinitionMap.put("/getPackageDetail", "anon");
  53. filterChainDefinitionMap.put("/getPackageLists", "anon");
  54. filterChainDefinitionMap.put("/getPackageShowname", "anon");
  55. filterChainDefinitionMap.put("/getPIClasses", "anon");
  56. filterChainDefinitionMap.put("/getPIGroups", "anon");
  57. filterChainDefinitionMap.put("/getPIServices", "anon");
  58. filterChainDefinitionMap.put("/getPromotions", "anon");
  59. filterChainDefinitionMap.put("/getWXCustomerCoupons", "anon");
  60. filterChainDefinitionMap.put("/getWxDecrypt", "anon");
  61. filterChainDefinitionMap.put("/getWXOpenid", "anon");
  62. filterChainDefinitionMap.put("/getWXUserAddress", "anon");
  63. filterChainDefinitionMap.put("/getYueSuo", "anon");
  64. filterChainDefinitionMap.put("/insertCustomerBooking", "anon");
  65. filterChainDefinitionMap.put("/insertEqCustomerBooking", "anon");
  66. filterChainDefinitionMap.put("/insertWXUserAddress", "anon");
  67. filterChainDefinitionMap.put("/updateWXUser", "anon");
  68. filterChainDefinitionMap.put("/updateWXUserAddress", "anon");
  69. filterChainDefinitionMap.put("/updateWXUserDefAddress", "anon");
  70. filterChainDefinitionMap.put("/WXSendBookingMessage", "anon");
  71. filterChainDefinitionMap.put("/WXSendOrderMessage", "anon");
  72. filterChainDefinitionMap.put("/WXSendYSOrderMessage", "anon");
  73. filterChainDefinitionMap.put("/getEquipmentAmount", "anon");
  74. filterChainDefinitionMap.put("/getValidPO", "anon");
  75. filterChainDefinitionMap.put("/getValidPosition", "anon");
  76. filterChainDefinitionMap.put("/getWxPosition", "anon");
  77. filterChainDefinitionMap.put("/insertPromotionUserInfo", "anon");
  78. filterChainDefinitionMap.put("/checkDcIntroducers", "anon");
  79. filterChainDefinitionMap.put("/getDcIntroduceLogs", "anon");
  80. filterChainDefinitionMap.put("/getDcIntroducerExtracts", "anon");
  81. filterChainDefinitionMap.put("/date_DcIntroducerExtracts", "anon");
  82. filterChainDefinitionMap.put("/getAccountNumber", "anon");
  83. filterChainDefinitionMap.put("/queryOneDcIntroducerExtract", "anon");
  84. filterChainDefinitionMap.put("/insertDcIntroducerExtract", "anon");
  85. filterChainDefinitionMap.put("/WXSendExtractMessage", "anon");
  86. filterChainDefinitionMap.put("/insertDcIntroduceLog", "anon");
  87. filterChainDefinitionMap.put("/getDcIntroducerConsultants", "anon");
  88. filterChainDefinitionMap.put("/queryMineOrder", "anon");
  89. filterChainDefinitionMap.put("/getYSOrder", "anon");
  90. filterChainDefinitionMap.put("/insertYsOrderPay", "anon");
  91. filterChainDefinitionMap.put("/checkCustomerPay", "anon");
  92. filterChainDefinitionMap.put("/queryYSOrderReturn", "anon");
  93. filterChainDefinitionMap.put("/updateEquipmenteHireHeadOnline", "anon");
  94. filterChainDefinitionMap.put("/getIndexPromotions", "anon");
  95. filterChainDefinitionMap.put("/CreatePOP", "anon");
  96. filterChainDefinitionMap.put("/getPromotionDC", "anon");
  97. filterChainDefinitionMap.put("/checkMkt", "anon");
  98. filterChainDefinitionMap.put("/getBranches", "anon");
  99. filterChainDefinitionMap.put("/insertPromotionDCUserInfo", "anon");
  100. filterChainDefinitionMap.put("/updateDcIntroducerApplicant", "anon");
  101. filterChainDefinitionMap.put("/updateAccountNumber", "anon");
  102. filterChainDefinitionMap.put("/insertPromotionChannelLog", "anon");
  103. filterChainDefinitionMap.put("/getPromotionTestByPrxID", "anon");
  104. filterChainDefinitionMap.put("/getPromotionTestResultByPtID", "anon");
  105. filterChainDefinitionMap.put("/insertPromotionTestUserScore", "anon");
  106. filterChainDefinitionMap.put("/CreateTestShare", "anon");
  107. filterChainDefinitionMap.put("/getPromotionDCByID", "anon");
  108. filterChainDefinitionMap.put("/getPromotionTestUserScoreByOpenID", "anon");
  109. filterChainDefinitionMap.put("/getPromotionTestResultShowByPrxID", "anon");
  110. filterChainDefinitionMap.put("/getWXDianPing", "anon");
  111. filterChainDefinitionMap.put("/getWXContentTypes", "anon");
  112. filterChainDefinitionMap.put("/queryUserContent", "anon");
  113. filterChainDefinitionMap.put("/getWXUser", "anon");
  114. filterChainDefinitionMap.put("/getWXMMSearchQuestion", "anon");
  115. filterChainDefinitionMap.put("/queryUserMMSearch", "anon");
  116. filterChainDefinitionMap.put("/getMmInfoResume", "anon");
  117. filterChainDefinitionMap.put("/getPackageImagesByID", "anon");
  118. //萌动开放权限
  119. filterChainDefinitionMap.put("/getNewUserCoupon", "anon");
  120. filterChainDefinitionMap.put("/getConsultTaskCoupon", "anon");
  121. filterChainDefinitionMap.put("/getDetectionTaskCoupon", "anon");
  122. filterChainDefinitionMap.put("/getRechargeTaskCoupon", "anon");
  123. //文件上传临时解决方案
  124. filterChainDefinitionMap.put("/uploadPromotionImg", "anon");
  125. filterChainDefinitionMap.put("/uploadImg", "anon");
  126. filterChainDefinitionMap.put("/uploadPayImg", "anon");
  127. filterChainDefinitionMap.put("/uploadMiniImg", "anon");
  128. filterChainDefinitionMap.put("/uploadDianPingImg", "anon");
  129. //简历分享问题
  130. filterChainDefinitionMap.put("/getWeChatInfo", "anon");
  131. //超人妈妈学院
  132. filterChainDefinitionMap.put("/college/queryUserPoints", "anon");
  133. filterChainDefinitionMap.put("/college/queryUserLearningCore", "anon");
  134. filterChainDefinitionMap.put("/college/queryUserLearningPractice", "anon");
  135. filterChainDefinitionMap.put("/college/queryUserLearningExperience", "anon");
  136. filterChainDefinitionMap.put("/college/queryUserLearningCoreDetail", "anon");
  137. filterChainDefinitionMap.put("/college/queryCoreDetail", "anon");
  138. filterChainDefinitionMap.put("/college/queryTests", "anon");
  139. filterChainDefinitionMap.put("/college/addTestDetail", "anon");
  140. filterChainDefinitionMap.put("/college/queryPracticeDetail", "anon");
  141. filterChainDefinitionMap.put("/college/queryExperienceDetail", "anon");
  142. filterChainDefinitionMap.put("/college/addCollegeBooking", "anon");
  143. filterChainDefinitionMap.put("/college/corePositive", "anon");
  144. filterChainDefinitionMap.put("/college/coreLearningUpdate", "anon");
  145. filterChainDefinitionMap.put("/college/coreLearningFinish", "anon");
  146. filterChainDefinitionMap.put("/college/getCollegeBooking", "anon");
  147. filterChainDefinitionMap.put("/college/bookingCancel", "anon");
  148. filterChainDefinitionMap.put("/eLearning/index", "anon");
  149. filterChainDefinitionMap.put("/eLearning/courseworkList", "anon");
  150. filterChainDefinitionMap.put("/eLearning/courseworkDetail", "anon");
  151. filterChainDefinitionMap.put("/eLearning/testList", "anon");
  152. filterChainDefinitionMap.put("/eLearning/testComplete", "anon");
  153. filterChainDefinitionMap.put("/eLearning/courseworkComplete", "anon");
  154. filterChainDefinitionMap.put("/eLearning/courseworkUpdate", "anon");
  155. filterChainDefinitionMap.put("/eLearning/courseworkBooking", "anon");
  156. filterChainDefinitionMap.put("/college/addScholarships", "anon");
  157. // ------------------------------------------------------------------
  158. filterChainDefinitionMap.put("/college/queryRedeemIndex", "anon");
  159. filterChainDefinitionMap.put("/college/queryRedeem", "anon");
  160. filterChainDefinitionMap.put("/college/queryUserScholarshipsLog", "anon");
  161. filterChainDefinitionMap.put("/college/queryRedeemDetail", "anon");
  162. filterChainDefinitionMap.put("/college/userRedeem", "anon");
  163. filterChainDefinitionMap.put("/college/enableCollege", "anon");
  164. // //用户,需要角色权限 “user”
  165. // filterChainDefinitionMap.put("/user/**", "roles[user]");
  166. // //管理员,需要角色权限 “admin”
  167. // filterChainDefinitionMap.put("/admin/**", "roles[admin]");
  168. //开放登陆接口
  169. filterChainDefinitionMap.put("/login", "anon");
  170. //其余接口一律拦截
  171. //主要这行代码必须放在所有权限设置的最后,不然会导致所有 url 都被拦截
  172. filterChainDefinitionMap.put("/**", "authcToken,authc");
  173. shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
  174. return shiroFilterFactoryBean;
  175. }
  176. /**
  177. * 自定义身份认证 realm;
  178. * <p>
  179. * 必须写这个类,并加上 @Bean 注解,目的是注入 CustomRealm,
  180. * 否则会影响 CustomRealm类 中其他类的依赖注入
  181. */
  182. @Bean
  183. public CustomRealm customRealm() {
  184. return new CustomRealm();
  185. }
  186. @Bean
  187. public SessionManager sessionManager() {
  188. ShiroSessionManager shiroSessionManager = new ShiroSessionManager();
  189. //这里可以不设置。Shiro有默认的session管理。如果缓存为Redis则需改用Redis的管理
  190. shiroSessionManager.setSessionDAO(new EnterpriseCacheSessionDAO());
  191. return shiroSessionManager;
  192. }
  193. @Bean
  194. public SecurityManager securityManager() {
  195. DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
  196. // securityManager.setRealm(customRealm());
  197. securityManager.setAuthenticator(authenticator(jlAdminUserService));
  198. //自定义session管理
  199. securityManager.setSessionManager(sessionManager());
  200. //自定义缓存实现
  201. // securityManager.setCacheManager(ehCacheManager());
  202. return securityManager;
  203. }
  204. protected JWTAuthFilter createAuthFilter(JlAdminUserService jlAdminUserService) {
  205. return new JWTAuthFilter(jlAdminUserService);
  206. }
  207. @Bean("jwtRealm")
  208. public Realm jwtShiroRealm(JlAdminUserService jlAdminUserService) {
  209. JWTShiroRealm myShiroRealm = new JWTShiroRealm(jlAdminUserService);
  210. return myShiroRealm;
  211. }
  212. @Bean
  213. public Authenticator authenticator(JlAdminUserService jlAdminUserService) {
  214. ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
  215. authenticator.setRealms(Arrays.asList(jwtShiroRealm(jlAdminUserService), customRealm()));
  216. authenticator.setAuthenticationStrategy(new FirstSuccessfulStrategy());
  217. return authenticator;
  218. }
  219. }