shiro初试
SpringBoot搭建shiro
Maven依赖
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.4.0</version> </dependency>
配置shiro
由于springboot还没有整合shiro,所以不能在application.yml中配置,只能在配置类中配置
@Configuration public class ShiroConfiguration { //Filter工厂,设置对应的过滤条件和跳转条件 @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); // 登录 shiroFilterFactoryBean.setLoginUrl("/login"); // 登录后要跳转的页面 shiroFilterFactoryBean.setSuccessUrl("/index"); // 认证不通过跳转的页面,提示用户未登录 shiroFilterFactoryBean.setUnauthorizedUrl("/unanthentication"); // 拦截器 Map<String,String> map = new HashMap<>(); //登出,具体的代码shiro已经在logout过滤器中实现了 map.put("/logout","logout"); //对所有用户认证 map.put("/**","authc"); // 配置不会被拦截的请求,anon也就是匿名能够访问的意思 map.put("/list", "anon"); shiroFilterFactoryBean.setFilterChainDefinitionMap(map); return shiroFilterFactoryBean; } }
完成上述配置即可访问,可以看到,只有/list能被正常访问,其他的都只能跳转到未认证的页面
过滤器
配置规则
这里讲的过滤器配置规则即shiroFilterFactoryBean里面的map存值的规则
- anon(anonymous):拦截器表示匿名访问,即不需要登录即可访问
- authc(authentication):拦截器表示需要身份认证通过后才能访问
还有更多的过滤器,后续会提到
匹配模式
Url模式使用Ant风格模式
Ant路径通配符支持 ?、*、** ,注意通配符匹配不包括目录分隔符 “/”
- ? : 匹配一个字符串,如 /admin? 将匹配 /admin1,但不匹配 /admin 或 admin/
- * : 匹配零个或多个字符串,如 /admin* 将匹配 /admin、/admin123,但是不匹配 /admin/1
- ** : 匹配路径中的零个或多个路径,如 /admin/** 将匹配 /admin/a 或 /admin/a/b
URL匹配顺序
URL权限采取第一次匹配优先的方式,即从头开始使用第一个匹配的url模式对应的过滤器链
如:
/bb/** filter1
/bb/aa filter2
/** filter3
如果请求的url是 “/bb/aa”,因为从上往下看,第一个/bb/**就能够匹配到,所以会走filter1,而不会管第二个匹配规则