您的位置:首页 > 编程语言 > Java开发

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

2017-07-21 12:30 453 查看
背景:前几天我在研究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<String, String> 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