最近做项目使用SSM框架需要整合Shiro对用户的权限进行细粒度的控制。由于页面使用的是HTML不是jsp,所以不能在页面上使用标签进行细粒度的权限控制,既然这样那就只能在后台对方法进行细粒度的控制了。
1、引入pom文件依赖:
版本:
<shiro.version>1.2.3</shiro.version>
依赖:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>${shiro.version}</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<version>${shiro.version}</version>
</dependency>
2、添加shiro配置文件,spring-shiro.xml:
<?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,也就是shiro的核心。
-->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="sessionManager" ref="shiroSessionManager"/>
<property name="realm" ref="myRealm"/>
<!--<!– 记住我 –>-->
<!--<property name="rememberMeManager" ref="rememberMeManager"/>-->
</bean>
<!-- session共享管理 -->
<bean id="shiroSessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<property name="globalSessionTimeout" value="3600000"/>
<property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
<property name="sessionValidationSchedulerEnabled" value="true"/>
<property name="sessionIdCookie" ref="pinsession"/>
</bean>
<!--
指定本系统SESSIONID, 默认为: JSESSIONID
问题: 与SERVLET容器名冲突, 如JETTY, TOMCAT 等默认JSESSIONID,
当跳出SHIRO SERVLET时如ERROR-PAGE容器会为JSESSIONID重新分配值导致登录会话丢失!
-->
<bean id="pinsession" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg name="name" value="APINSESSIONID"/>
</bean>
<!--
定时清理僵尸session,Shiro会启用一个后台守护线程定时执行清理操作
用户直接关闭浏览器造成的孤立会话
-->
<bean id="sessionValidationScheduler"
class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler">
<property name="interval" value="3600000"/>
<property name="sessionManager" ref="shiroSessionManager"/>
</bean>
<!-- 自定义的shiroRealm 类中继承了 AuthorizingRealm类,并实现了登陆认证和授权认证的方法 -->
<bean id="myRealm" class="com.dongao.monitor.shiro.ShiroRealm">
<!-- <property name="credentialsMatcher" ref="credentialsMatcher"/> -->
<property name="cachingEnabled" value="true" />
<!-- 开启认证缓存-->
<property name="authenticationCachingEnabled" value="true"/>
<!--开启授权缓存-->
<property name="author