一步一步教你用shiro——1引入shiro框架

  • 一步一步教你用shiro——1引入shiro框架
  • 一步一步教你用shiro——2配置并自定义realm
  • 一步一步教你用shiro——3配置并自定义sessionManager
  • 一步一步教你用shiro——4配置并自定义sessionDao
  • 一步一步教你用shiro——5配置rememberMe
  • 一步一步教你用shiro——6总结和心得

shiro这个权限框架确实很实用很方便,网上关于它的分析也很多,但是有很多资料都太老了。尚硅谷的视频教程中关于session管理的部分有错误。《一头扎进shiro》是老版本shiro而且太浅了(硬是说session用web容器的就够了,没必要改,敢情你家应用都是单实例的?),慕课网的视频最全面,但是不够细。有很多问题只能自己看源码,做尝试解决。

所以将shiro的一些经验记录下来,希望能帮助到读到本文的你,本文环境shiro1.3.2、spring4.3.5没有使用boot、jdk8、tomcat8.5、mysql5.6、redis3.2.11

目标:通过shiro实现对后端接口进行权限控制,所有静态资源都不需要权限验证,使用redis实现session共享,避免session单点问题

  • shiro1.4.0在17年5月份就有了,但是现在shiro官网上还是说1.3.2是最后的稳定版,为了保险,还是用这个老版本
一步一步教你用shiro——1引入shiro框架_第1张图片
  • shiro不推荐使用shiro-all这个总包,可能会造成maven工作不正常,一般常用的是core、spring、web这三个包
一步一步教你用shiro——1引入shiro框架_第2张图片
        
        
        
            org.apache.shiro
            shiro-core
            1.3.2
            
                
                    org.slf4j
                    slf4j-api
                
            
        
        
            org.apache.shiro
            shiro-web
            1.3.2
        
        
            org.apache.shiro
            shiro-spring
            1.3.2
        
  • web.xml中增加spring的代理filter,实际filter是shiro的ShiroFilterFactoryBean(后面说ShiroFilterFactoryBean的具体配置),targetFilterLifecycle为true代表由spring控制该filter的生命周期。
  • 一般这段配置不需要改,只需要改url-pattern。shiro源码中的sample配的是/*,因为我只想控制用户访问后端接口的权限,静态资源可以随便访问,所以后端接口都用的api开头,让shiro过滤器只对api开头的请求生效(这样还可以避免频繁访问session,造成redis压力过大的问题,具体后面说)
    
        shiroFilter
        org.springframework.web.filter.DelegatingFilterProxy
        
            targetFilterLifecycle
            true
        
    
    
        shiroFilter
        /api/*
    
  • 在spring的配置文件中配置ShiroFilterFactoryBean,注意id一定要和web.xml中 的filter-name一致,否则proxyFilter找不到实际filter。
  • shiro的内置过滤器可以百度每个的含义和配制方法,这里需要说下authc。使用authc的接口是一定要输入用户名密码登陆后才能访问,哪怕通过shiro的rememberMe自动登录的用户也需要重新输入用户名密码重新登录后才能访问。
  • 就像我们平时访问淘宝,一进网站就自动登录了,但是第一次做敏感操作的时候还是要输入用户名密码登陆进行一次认证,然后再做敏感操作都不需要输入用户名密码了。
    
    
        
        
        
        
        
        
        
        
            
                
                /api/login = anon
                /api/test? = authc
                
                /api/file = roles[common]
                
                
                /api/logout = logout
                
                
                
                /** = authc
            
        
        
        
            
                
                    
                
            
        
    

你可能感兴趣的:(一步一步教你用shiro——1引入shiro框架)