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,而不会管第二个匹配规则

posted @ 2018-12-11 11:28  Jin同学  阅读(166)  评论(0)    收藏  举报