shiro与ssm的整合

本文详细介绍了如何在项目中配置Apache Shiro权限管理系统,包括在web.xml中设置DelegatingFilterProxy,定义ShiroFilterFactoryBean,实现自定义Realm,以及配置DefaultWebSecurityManager。此外,还讲解了如何通过注解声明权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、首先在WEB-INF/web,xml中配置过滤器

DelegatingFilterProxy 作用是自动到 Spring 容器查找名字为 shiroFilter(filter-name) 的 bean 并把所有 Filter 的操作委托给它。

targetFilterLifecycle:指明作用于filter的所有生命周期。

如果设置"targetFilterLifecycle"为True,则spring来管理Filter.init()和Filter.destroy();若为false,则这两个方法失效!!

在Spring中配置的bean的name要和web.xml中的<filter-name>一样.

<filter>

<filter-name>shiroFilter</filter-name>

<filterclass>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

<init-param>

<param-name>targetFilterLifecycle</param-name>

<param-value>true</param-value>

</init-param>

<!--<init-param>-->

<!--<param-name>targetBeanName</param-name>-->

<!--<param-value>shiroFilter</param-value>-->

<!--</init-param>-->

</filter>

 

<filter-mapping>

<filter-name>shiroFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

2、在spring配置文件中配置3个bean对象

(1)shiro过滤器:对应上面web.xml中配置的过滤器,为了方便对各个请求认证策略的设置,可以自己实现ShiroFilterFactoryBean,在其中定义方法通过setfilterChainDefinitions方法设置认证策略,由于认证策略的处理流程是有序的自上而下,所有需要将请求地址和对象的策略封装到LinkedHashMap中。最后在配置文件中添加init-method属性,将自定义类中设置方法设置为初始化方法,使ShiroFilterFactoryBean在初始化的执行。

(2)realm:可以有 1 个或多个 Realm,可以认为是安全实体数据源,即用于获取安全实体 的;可以是JDBC 实现,也可以是内存实现等等;由用户提供;所以一般在应用中都需要实现自己的Realm;

realm的继承关系图

从上图我们来看我们一般继承AuthorizingRealm(授权)即可,其继承了AuthenticatingRealm(认证),而且间接继承了CachingRealm(缓存)

 

(3)securityManager:相当于SpringMVC 中的 DispatcherServlet;是 Shiro 的心脏; 所有具体的交互都通过 SecurityManager 进行控制;它管理着所有 Subject、且负责进行、认证、授权、会话及缓存的管理。

DefaultWebSecurityManager的类关系结构图

从上图我们可以看出来,DefaultWebSecurityManager是最底层的实现类,而且其中的构造方法是层层调用的,上面实现的类,分别有数据源管理,缓存管理,认证管理,授权管理,会话管理等,我们可以对shiro的设置进行各种设置。

 

<bean id="shiroFilter" class="com.qianfeng.shiro.MyShiroFilterFactoryBean" init-method="init">

<property name="securityManager" ref="securityManager"/>

<!--

如果当前用户没有登录就跳转到这个页面行登录

-->

<property name="loginUrl" value="/login.html"/>

<!--

登录成功后的页面

-->

<property name="successUrl" value="/success.html"/>

<!--

没有授权的提示页面

-->

<property name="unauthorizedUrl" value="/unauthorized.html"/>

<!-- The 'filters' property is not necessary since any declared javax.servlet.Filter bean

defined will be automatically acquired and available via its beanName in chain

definitions, but you can perform overrides or parent/child consolidated configuration

here if you like: -->

<!-- <property name="filters">

<util:map>

<entry key="aName" value-ref="someFilterPojo"/>

</util:map>

</property> -->

<!--<property name="filterChainDefinitions">-->

<!--<value>-->

<!--/favicon.ico = anon-->

<!--/logo.png = anon-->

<!--/shiro.css = anon-->

<!--/index.html = anon-->

<!--/login.html= anon-->

<!--/abc.html = authc-->

<!--# allow WebStart to pull the jars for the swing app:-->

<!--/*.jar = anon-->

<!--# everything else requires authentication:-->

<!--/loginuser.action = anon-->

<!--/user/loginxiaomi.action = anon-->

<!--/xiaoqu.html = perms[fdsfwerdfss]-->

<!--/** = authc-->

<!--</value>-->

<!--</property>-->

</bean>

 

<bean id="xiaomiRealm" class="com.qianfeng.shiro.realm.XiaomiRealm2">

<property name="credentialsMatcher">

<bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">

<property name="hashAlgorithmName" value="MD5"/>

<property name="hashIterations" value="1024"/>

</bean>

</property>

</bean>

 

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">

<!--<property name="realm" ref="myrealm"/>-->

<property name="realm" ref="xiaomiRealm"/>

</bean>

 

3、注解配置

如果使用注解声明权限的方式,需要将一下三个Bean放到springmvc的配置文件中,否则注解权限无效

bean后处理器自动调用init方法和distory方法

<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

 

 

depends-on属性:两个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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值