pom.xml 的配置:
<properties>
<shiro.version>1.2.2</shiro.version>
</properties>
<dependencies>
<!-- 权限控制 框架 -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>${shiro.version}</version>
</dependency>
web.xml的配置:
<!--
2.5的工程,filter执行的顺序是按照在web.xml中注册的顺序从上往下执行的
3.0的工程,filter执行的顺序是类名的字典顺序
listener
filter
servlet(第一次访问的时候创建)
-->
<!--
spring框架提供,整合shiro框架
本拦截器一定要卸载struts的拦截器之上
在DelegatingFilterProxy创建的过程中,依赖了一个对象,这个对象必须在applicationContext.xml文件中注册
而且注册的时候声明的id必须和DelegatingFilterProxy声明的filter-name保持一致
-->
<filter>
<filter-name>shiroFilterFactoryBean</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>shiroFilterFactoryBean</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
applicationContext.xml 的配置:
<!-- 初始化shiro框架提供的过滤器 -->
<bean id="shiroFilterFactoryBean" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<!-- 注入安全管理器 -->
<property name="securityManager" ref="securityManager"></property>
<!-- 权限认证的页面,登录页面 -->
<property name="loginUrl" value="/login.html"></property>
<!-- 权限认证成功以后要跳转的页面 -->
<property name="successUrl" value="/index.html"></property>
<!-- 权限不足要跳转的页面
只对拦截器生效,不会注解方式生效
-->
<property name="unauthorizedUrl" value="/unauthorizedUrl.html"></property>
<!--指定拦截的规则 -->
<property name="filterChainDefinitions">
<!--
authc:框架提供的过滤器,有权限就放行,没有权限就拦截
anon:框架提供的过滤器,可以匿名访问
perms:框架提供的过滤器,用户请求资源的时候,会去检查用户是否拥有对应的权限,如果有就放行,没有,跳转到unauthorizedUrl属性指定的页面
拦截的规则执行的时候是从上往下执行的,一旦有一个规则匹配成功,后面的规则就不再执行了
拦截的规则不可以折行
-->
<value>
/css/* = anon 拦截器拦截主要是用户还没有登陆时 需要保护的资源
/data/* = anon
/images/* = anon
/js/** = anon
/validatecode.jsp = anon
/userAction_login.action = anon
/courierAction_pageQuery.action = perms["courierAction_pageQuery"]
/hi.html = perms["courierAction_pageQuery"]
/** = authc
</value>
</property>
</bean>
<!-- 注册安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- 注入realm -->
<property name="realm" ref="userRealm"></property>
</bean>
如果需要开启事务注解定义拦截规则就要在
applicationContext.xml 的配置加上如下配置: <!--
开启事务注解
JDK代理方式 : 根据目标对象所实现的接口,创建了一个代理对象
CGLib代理方式 : 创建一个目标对象的子类
proxy-target-class:true,使用cglib代理
proxy-target-class:false,使用jdk代理
-->
<tx:annotation-driven proxy-target-class="true"
transaction-manager="transactionManager" />
<!-- 基于Spring的自动代理,创建Service层的实现 -->
<bean
class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">
<!-- 开启cglib代理 -->
<property name="proxyTargetClass" value="true"></property>
</bean>
<!--
配置切面= 切点(向那里插入代码)+通知 (要插入的代码)
-->
<bean
class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
<!-- 注入安全管理器 -->
<property name="securityManager" ref="securityManager"></property>
</bean>
注解的应用场景是用户已经完成登陆了
标签的方式 主要应用在 动态的展示权限(比如用户有权限,就给他显示修改功能,没权限就不显示)