11package com .nineya .shiro .config ;
22
33import com .nineya .shiro .filter .TokenFilter ;
4- import org .apache .shiro .SecurityUtils ;
5- import org .apache .shiro .cache .MemoryConstrainedCacheManager ;
6- import org .apache .shiro .mgt .DefaultSessionStorageEvaluator ;
7- import org .apache .shiro .mgt .DefaultSubjectDAO ;
84import org .apache .shiro .mgt .SecurityManager ;
95import org .apache .shiro .realm .Realm ;
10- import org .apache .shiro .spring .config .ShiroAnnotationProcessorConfiguration ;
11- import org .apache .shiro .spring .config .ShiroBeanConfiguration ;
126import org .apache .shiro .spring .security .interceptor .AuthorizationAttributeSourceAdvisor ;
137import org .apache .shiro .spring .web .ShiroFilterFactoryBean ;
14- import org .apache .shiro .spring .web .config .*;
15- import org .apache .shiro .subject .Subject ;
168import org .apache .shiro .web .mgt .DefaultWebSecurityManager ;
179import org .springframework .aop .framework .autoproxy .DefaultAdvisorAutoProxyCreator ;
18- import org .springframework .boot .autoconfigure .cache .RedisCacheManagerBuilderCustomizer ;
19- import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
2010import org .springframework .context .annotation .Bean ;
2111import org .springframework .context .annotation .Configuration ;
22- import org .springframework .context .annotation .Import ;
23- import org .springframework .web .bind .annotation .ModelAttribute ;
2412
2513import javax .servlet .Filter ;
26- import java .util .Collections ;
2714import java .util .HashMap ;
2815import java .util .Map ;
2916
3017/**
3118 * @author 殇雪话诀别
3219 * 2021/2/15
20+ * 配置类
3321 */
3422@ Configuration
3523public class ShiroConfiguration {
3624
25+ /**
26+ * 配置代理,没有配置将会导致注解不生效
27+ * @return
28+ */
3729 @ Bean
3830 public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator () {
3931 DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator ();
4032 defaultAAP .setProxyTargetClass (true );
4133 return defaultAAP ;
4234 }
4335
36+ /**
37+ * 配置代理,没有配置将会导致注解不生效
38+ * @return
39+ */
4440 @ Bean
4541 public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor (SecurityManager securityManager ) {
4642 AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor ();
4743 authorizationAttributeSourceAdvisor .setSecurityManager (securityManager );
4844 return authorizationAttributeSourceAdvisor ;
4945 }
5046
51- //将自己的验证方式加入容器
47+ /**
48+ * 将自己的验证方式加入容器
49+ * @return
50+ */
5251 @ Bean
53- public Realm myShiroRealm () {
54- StudyRealm customRealm = new StudyRealm ();
55- return customRealm ;
52+ public Realm studyRealm () {
53+ StudyRealm studyRealm = new StudyRealm ();
54+ return studyRealm ;
5655 }
5756
58- // @Bean
59- // public ShiroFilterChainDefinition shiroFilterChainDefinition() {
60- // DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
61- //
62- // // 其实等同于注解的权限控制
63- // chainDefinition.addPathDefinition("/admin", "authc, roles[read,write]");
64- // chainDefinition.addPathDefinition("/index", "authc, perms[select]");
65- // // 不允许管理员的create权限
66- // chainDefinition.addPathDefinition("/add", "authc, perms[user:create]");
67- //
68- // // 对所有用户认证
69- // chainDefinition.addPathDefinition("/**", "authc");
70- //
71- // return chainDefinition;
72- // }
73-
74- // @Bean
75- // public TokenFilter tokenFilter() {
76- // return new TokenFilter();
77- // }
57+ /**
58+ * 不应该将过滤器的实现注册为bean,否则会导致Filter过滤器顺序混乱,导致抛出异常
59+ * 如果一定要注册为 Bean,可以使用 Order 指定优先级,还未尝试过
60+ * @return
61+ */
62+ public TokenFilter tokenFilter () {
63+ return new TokenFilter ();
64+ }
7865
79- //Filter工厂,设置对应的过滤条件和跳转条件
66+ /**
67+ * Filter工厂,设置对应的过滤条件和跳转条件
68+ * @return
69+ */
8070 @ Bean
8171 public ShiroFilterFactoryBean shiroFilterFactoryBean () {
8272 ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean ();
8373 shiroFilterFactoryBean .setSecurityManager (securityManager ());
8474 Map <String , String > map = new HashMap <>();
8575 //登出
8676 map .put ("/logout" , "logout" );
87- //对所有用户认证
77+ // 使用我们自己创建的jwt过滤器名称
8878 map .put ("/**" , "jwt" );
8979 //登录
9080 shiroFilterFactoryBean .setLoginUrl ("/login" );
@@ -93,39 +83,19 @@ public ShiroFilterFactoryBean shiroFilterFactoryBean() {
9383 //错误页面,认证不通过跳转
9484 shiroFilterFactoryBean .setUnauthorizedUrl ("/error" );
9585 shiroFilterFactoryBean .setFilterChainDefinitionMap (map );
96- shiroFilterFactoryBean .setFilters (new HashMap <String , Filter >(){{put ("jwt" , new TokenFilter ());}});
86+ shiroFilterFactoryBean .setFilters (new HashMap <String , Filter >(){{put ("jwt" , tokenFilter ());}});
9787 return shiroFilterFactoryBean ;
9888 }
9989
100- //权限管理,配置主要是Realm的管理认证
90+ /**
91+ * 权限管理,配置主要是Realm的管理认证,同时可以配置缓存管理等
92+ * @return
93+ */
10194 @ Bean
10295 public DefaultWebSecurityManager securityManager () {
10396 DefaultWebSecurityManager webSecurityManager = new DefaultWebSecurityManager ();
104-
105- //session管理
106- // webSecurityManager.setSessionManager(sessionManager());
107-
10897 //realm管理
109- webSecurityManager .setRealm (myShiroRealm ());
110-
111- //缓存管理
112- // webSecurityManager.setCacheManager(new MemoryConstrainedCacheManager());
113- //使用ehcache
114- // EhCacheManager ehCacheManager = new EhCacheManager();
115- // ehCacheManager.setCacheManager(getEhCacheManager());
116- // webSecurityManager.setCacheManager(ehCacheManager);
117-
118- //redis实现
119- // webSecurityManager.setCacheManager(redisCacheManager());
120-
121- // //关闭session
122- // DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
123- // DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
124- // defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
125- // subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
126- // webSecurityManager.setSubjectDAO(subjectDAO);
127- SecurityUtils .setSecurityManager (webSecurityManager );
128-
98+ webSecurityManager .setRealm (studyRealm ());
12999 return webSecurityManager ;
130100 }
131101}
0 commit comments