1.shiro配置类
1.1需要配置什么?
创建一个ShiroFilterFactoryBean对象,检测认证(向Bean中传入SecurityManager对象),没有认证的时候应该访问哪个URL地址(setLoginUrl()),哪些资源是可以被匿名访问的(setFilterChainDefinitionMap(LinkedHashMap<String,String>()));
其中,key为url路径的相对地址,value为"anon"表示允许匿名访问的资源,value为"authc"表示需要授权才可以访问的资源
1.2代码示例
@Configuration
public class ShiroConfig {
/**
* @Bean表示方法的返回值要交给spring管理
* SecurityManager是shiro框架的核心
* @return DefaultSecurityManager
*/
@Bean
public SecurityManager securityManager() {
DefaultSecurityManager seManager = new DefaultWebSecurityManager();
return seManager;
}
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean();
LinkedHashMap<String, String> filterMap = new LinkedHashMap<>();//注意为什么拦截器要用LinkedHashMap
//因为需要认证访问的资源一定要写在可以匿名访问的资源的下面
factoryBean.setSecurityManager(securityManager());
factoryBean.setLoginUrl("doLoginUI");
//静态资源允许匿名访问:"anon"
filterMap.put("/bower_components/**","anon");
filterMap.put("/build/**","anon");
filterMap.put("/dist/**","anon");
filterMap.put("/plugins/**","anon");
//除了匿名访问的资源,其它都要认证("authc")后访问
filterMap.put("/**","authc");
factoryBean.setFilterChainDefinitionMap(filterMap);
return factoryBean;
}
}
2.认证流程
subject.login(token)提交给SecurityManager,token这里理解为令牌
SecurityManager将信息委托给Authenticator
Authenticator将认证信息交给Realm
Realm查询数据库并封装返回
Authenticator对数据进行比对