2.Shiro简单集成Spring

1.这里只是做一个简单的集成,功能是只能访问允许的页面,需要认证的页面则无法访问。

  • 环境:Eclipse Oxygen,Maven3.5.2,JDK1.8.0_191,Tomcat v8.5

  • 引入Spring依赖和Shiro的依赖

<dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
           </dependency>
           <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.16</version>
           </dependency>        
  
          <!-- shiro -->
           <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-all</artifactId>
                <version>1.2.5</version>
           </dependency>
           <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>1.2.5</version>
           </dependency>
           <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-web</artifactId>
                <version>1.2.5</version>
           </dependency>
           <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-quartz</artifactId>
                <version>1.2.5</version>
           </dependency>
           <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>1.2.5</version>
           </dependency>
           <!-- spring,spring-webmvc依赖 -->
           <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-webmvc</artifactId>
               <version>5.1.5.RELEASE</version>
           </dependency>
           <!--  -->
           <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-jdbc</artifactId>
               <version>5.1.5.RELEASE</version>
           </dependency>
           <dependency>
               <groupId>org.springframework</groupId>
               <artifactId>spring-tx</artifactId>
               <version>5.1.5.RELEASE</version>
           </dependency>
           
           <dependency>
               <groupId>javax.servlet.jsp</groupId>
               <artifactId>javax.servlet.jsp-api</artifactId>
               <version>2.2.1</version>
               <scope>provided</scope>
           </dependency>
           
           <!-- ehcache依赖 -->
           <dependency>
               <groupId>net.sf.ehcache</groupId>
               <artifactId>ehcache-core</artifactId>
               <version>2.4.3</version>
           </dependency>
  • 配置文件

首先是web.xml

1.加载spring的配置文件
2.加载springmvc的配置文件
3.编码方式
4.加载shiro配置文件

之后在web.xml中所有请求都会被shiroFilter拦截

<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <async-supported>true</async-supported>
        <init-param>
            <param-name>targetFilterLifecycle</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--<init-param>
            <param-name>targetBeanName</param-name>
            <param-value>a</param-value>
        </init-param>-->
</filter>
<filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>        
</filter-mapping>

DelegatingFilterProxy实际上是Filter的代理对像,默认情况下的会到springIOC容器中找<filter-name>对应的filter bean,特可以通过targetBeanName的初始化参数来配置filter bean的ID。

  • spring.xml
1.配置SecurityManager
2.配置CacheManager
3.配置Realm
4.配置LifecycleBeanPostProcessor(生命周期bean后处理器)
5.启用IOC容器使用Shiro注解,但必须在配置了LifecycleBeanPostProcessor(生命周期bean后处理器)之后才能使用
6.配置ShiroFilter,id属性值必须和配置在web.xml中DelegatingFilterProxy的<filter-name>一致 若不一致, 则会抛出: NoSuchBeanDefinitionException. 因为 Shiro 会来 IOC 容器中查找和 <filter-name> 名字对应的 filter bean.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 1.配置SecurityManager -->
    <bean id="securityManager"  class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="cacheManager" ref="cacheManager"/>
        <property name="sessionMode" value="native"/>
        <property name="realm" ref="jdbcRealm"/>
    </bean>
    <!-- 2.配置CacheManager,需要加入ehcache的jar包和配置文件 -->
    <bean id="cacheManager"  class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <!-- <property name="cacheManager"  ref="ehCacheManager"/> -->
        <property name="cacheManagerConfigFile"  value="classpath:ehcache.xml"/>
    </bean>
     <!-- 3.配置Realm,我们可以自定义Realm
           直接实现的org.apache.shiro.realm.Realm接口的Bean
     -->
    <bean id="jdbcRealm"  class="com.test.shiro.realm.ShiroRealm"></bean>
     <!-- 4.LifecycleBeanPostProcessor(生命周期bean后处理器),可以自动调用配置在springIOC容器中Shiro bean的生命周期方法 -->
    <bean id="lifecycleBeanPostProcessor"  
          class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
     <!-- 5.启用IOC容器使用Shiro注解,但必须在配置了LifecycleBeanPostProcessor(生命周期bean后处理器)之后才能使用 -->
    <bean  
       class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
       depends-on="lifecycleBeanPostProcessor"/>
    <bean  class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>
     <!-- 6.配置shiroFilter,id属性值必须和配置在web.xml中DelegatingFilterProxy的<filter-name>一致若不一致, 则会抛出: NoSuchBeanDefinitionException. 因为 Shiro 会来 IOC 容器中查找和 <filter-name> 名字对应的 filter bean.  -->
    <bean id="shiroFilter"  class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <property name="loginUrl" value="/login.jsp"/>
        <property name="successUrl" value="/index.jsp"/>
        <property name="unauthorizedUrl"  value="/unauthorized.jsp"/>
           <!--
                配置那些URL需要保护,以及请求这些URL需要的权限
                1.URL模式使用Ant风格模式,支持通配符?,*,**,不包括目录分隔符/
                     ?:匹配一个字符,如/admin?匹配/admin1,但是不匹配/admin或/admin/
                     *:匹配零个或多个字符串,如/admin*匹配/admin,/admin1,/admin123,但是不匹配/admin/1
                     **:匹配路径中的零个或多个路径,如 /admin/** 将匹配 /admin/a 或 /admin/a/b
                2.URL 权限采取第一次匹配优先的方式,即从头开始使用第一个匹配的 url 模式对应的拦截器链
                1).anon:可以被匿名访问
                2).authc:必须认证之后才能访问
                3).logout:登出的过滤器
           -->
        <property name="filterChainDefinitions">
            <value>
                /login.jsp = anon
                # everything else requires authentication:
                /** = authc
            </value>
        </property>
    </bean>
</beans>
  • spring-mvc.xml
1.自动扫描包结构
2.配置前缀后缀
3.开启注解
4.处理静态资源请求
  • shiro.ini
#----->[users]表示以下是用户配置
[users]
#用户   密码     角色    角色
root = secret, admin
guest = guest, guest
presidentskroob = 12345, president
darkhelmet = ludicrousspeed, darklord, schwartz
lonestarr = vespa, goodguy, schwartz
#----->[users]表示以下是角色配置
[roles]
admin = *
#角色对应的行为
schwartz = lightsaber:*
#角色对应的行为,比上面更加具体,允许对user类型的zhangsan实例做delete,这是一个具体的操作
goodguy = user:delete:zhangsan
  • ehcacahe.xml

从shiro源码包中复制一份

  • 几个页面

    • index.jsp

    • user.jsp

    • login.jsp

    • unauthorized.jsp

2.启动tomcat运行

http://localhost:8080/项目名/login.jsp

可以访问到login.jsp,其他页面不行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值