SpringBoot 整和 shiro 把拦截路径提出到配置文件中

背景:前几天我在研究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片段中修改。经测试,完美运行。

你可能感兴趣的:(SpringBoot 整和 shiro 把拦截路径提出到配置文件中)