zoukankan      html  css  js  c++  java
  • Spring与Shiro整合

    Spring整合篇--Shiro

    作者 : Stanley 罗昊

    【转载请注明出处和署名,谢谢!】

    什么是Shiro?

    链接:https://www.cnblogs.com/StanleyBlogs/p/10732278.html

    springboot集成shiro基础篇:https://www.cnblogs.com/StanleyBlogs/p/11407350.html

    Spring集成Shiro配置

    首先,在项目中引入jar包或依赖,关于spring以及mvc、mybatis、lo4j的依赖或jar包,怎么引入在这里就不必多讲了;

    最主要的就引入关于shiro的依赖以及介绍,由于我用的是Maven目前用jar包的或Gradle的小伙伴也无需担心,因为作用都一样;

    <!--日志相关-->
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <!--集合工具类 -->
    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>
    <!-- Shiro核心包 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <!-- shiro与web整合包 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-web</artifactId>
        <version>1.3.2</version>
    </dependency>
    <!-- shiro相关缓存包 -->
    <dependency>
        <groupId>net.sf.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>2.10.4</version>
    </dependency>
    <!-- Shiro与Spring进行整合 -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.4.0</version>
    </dependency>

    在web.xml中配置shiro与spring框架集成需要的ShiroFilter拦截器

    问:为什么需要在web.xml配置拦截器呢?

    答:原因非常简单,因为我们的spring环境一般所有创建对象都归spring去操作,因此,shiroFiler不需要归纳spring管理,shiro需要有自己的创建方式,这就是整合的意思;

    我们只需要在配置文件中配置即可,值得注意的是,我们需要创建一个类名为:shiroFilter的类,要与配置文件中第二行的名称相同!

     这个过滤器的是可以从spring容器中去找到我们的配置类也就是shiroFilter类;

    具体怎么去找呢,关键就是第二行的shiroFilter这个词;

    添加Shiro配置文件

    1.自定义Realm

    1.1 首先我们需要需要创建shiro的配置文件也就是spring-shiro.xml;

    我们直接拷贝spring.xml文件,删除调用了根元素之外的所有内容:

    在这之前呢,我们可以先把Realm给创建出来,也就是UserRealm,我们可以在我们的项目目录中创建一个Realm包,用来专门存放Realm以便区分开来:

     1.2 类创建后,我们需要继承AuthorizingRealm这个接口,并且需要实现其中的两个方法,并且重写getName这个值:

     1.3 写好后,我们需要将UserRealm这个类路径复制到配置文件中:

    这样,自定义的Realm就搞定了;

    2.配置我们的安全管理器SecurityManager

    安全管理器配置也非常简单,直接在配置文件中编写即可,值得注意的是,下面的DefauktWebSecurityManager是固定的写法,类名必须一样!

     因为SecurityManager是安全管理器,需要管理realm的安全,所以,需要跟我们定义的realm名字相同,我们定义的是userRealm;

    3.Shiro的Web过滤器

     Bean id 一定要跟web.xml文件中的shiroFilter一样!

    拦截器功能讲解:

    3.1:SecurityManager 就是对应我们上面配置的SecurityManager安全管理器中的词,对应上即可,作用就是用来执行、验证我们的授权操作包括拦截后的一些相关处理;

    3.2 lgoinUrl:当我们进行登陆时候,登陆失败(被拦截)就会跳转至login这个页面中(这个路径中),这个页面可以自行配置;

    3.3 unauthorizedUrl: 当你没有权限的时候,他就是把你拦截,并且把你跳转到合法页面上(友好页面);

    3.4 filterChainDefinitions:这个所有的请求,所有的路径都需要在这里进行配置,我目前就在这里配置了一个/**,就表示所有请求都必须通过本过滤器(autch)进行验证,说白了就是检查你当前请求是否合法或有权限,并且做相对应的处置;

    4.在mvc.xml文件中配置中引入spring-shiro.xml文件

  • 相关阅读:
    线程

    线程
    【java】彩票中奖码生成器:java.util.Random里的方法public int nextInt(int bound)
    【java】java.lang.Math:public static long round(double a)和public static int round(float a)
    【java】对象克隆protected Object clone() throws CloneNotSupportedException
    【java】对象变成垃圾被垃圾回收器gc收回前执行的操作:Object类的protected void finalize() throws Throwable
    【java】计算一段代码执行时长java.lang.System类里的public static long currentTimeMillis()方法
    【java】多线程同步生产者消费者问题
    【java】多线程同步死锁
  • 原文地址:https://www.cnblogs.com/StanleyBlogs/p/11943115.html
Copyright © 2011-2022 走看看