背景:前几天我在研究SpringBoot 的时候,在网上找了很多资料,发现只能用配置类来配置 shiro,关于拦截的路径的配置,也只能写在配置类中。如下图:
@Configuration
//shiro 的核心配置类
public class ShiroConfiguration {
@Bean(name="shiroFilter")
public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager manager) {
ShiroFilterFactoryBean bean=new ShiroFilterFactoryBean();
bean.setSecurityManager(manager);
//配置登录的url和登录成功的url
bean.setLoginUrl("/index.jsp");
bean.setSuccessUrl("/home.action");
private LinkedHashMap filterChainDefinitionMap=new LinkedHashMap<>();
filterChainDefinitionMap.put("/tologin.action", "anon"); //表示可以匿名访问
filterChainDefinitionMap.put("/login.action", "anon");
filterChainDefinitionMap.put("/staticfile/**","anon");
filterChainDefinitionMap.put("/*", "authc");//表示需要认证才可以访问
filterChainDefinitionMap.put("/**", "authc");//表示需要认证才可以访问
filterChainDefinitionMap.put("/*.*", "authc");
bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return bean;
}......
因为把拦截的路径写死在配置类中,程序不好维护。
经研究可以把上面 这部分:
filterChainDefinitionMap.put("/tologin.action", "anon"); //表示可以匿名访问
filterChainDefinitionMap.put("/login.action", "anon");
filterChainDefinitionMap.put("/staticfile/**","anon");
filterChainDefinitionMap.put("/*", "authc");//表示需要认证才可以访问
filterChainDefinitionMap.put("/**", "authc");//表示需要认证才可以访问
filterChainDefinitionMap.put("/*.*", "authc")
拿到 configuration.yml 中。(上面部分就可以注释掉了)在 yml 文件中配置如下:
shiroFilter:
filterChainDefinitionMap:
/tologin.action: anon
/login.action: anon
/staticfile/**: anon
/**: authc
/*.*: authc
/*: authc
/: authc
然后再给最上面的配置类加上 @ConfigurationProperties(prefix="shiroFilter") 注解即可(意为从配置文件中读取属性,前缀是shiroFilter)如果还有个性化的拦截设置,可以在上面的yml片段中修改。经测试,完美运行。