最近使用shiro给新系统做了权限管理,在这里记录一下。
思路:
用户—>角色—>权限(资源)
前端动态路由菜单,实现精确到按钮的用户权限控制,在接口上添加@RequiresPermissions注解校验用户的权限。
问题:
- 项目是前后端分离的后台项目,后面可能为移动端提供服务,需要考虑保持会话问题,因为shiro是使用session存储用户信息的,使用sessionId存储在cookie保持会话的,前端ajax请求是不携带cookie的,移动端同样的问题。
代码:
- pom.xml引入以下依赖,这里用ehcache做缓存,储存用户的认证信息和授权信息。
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.6</version>
</dependency>
- applicationContext-shiro.xml
<description>Shiro安全配置</description>
<!-- 读取配置文件 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath*:/application.properties" />
<!-- 自定义Realm域-->
<bean id="myRealm" class="com.autobole.common.shiro.AutoBoleUserRealm"/>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!--自定义的Realm域-->