Shiro进行权限控制

列举Shiro的几种控制权限的方法


一、使用shiro的方法注解方式权限控制

第一步:在spring配置文件中开启shiro注解支持

        

 <!-- 开启shiro框架注解支持 -->

          <bean id="defaultAdvisorAutoProxyCreator" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator">

                       <!-- 必须使用cglib方式为Action对象创建代理对象-->

                      <property name="proxyTargetClass" value="true"/>

         </bean>

        <!-- 配置shiro框架提供的切面类,用于创建代理对象 -->

       <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>


第二步:在Action的方法上使用shiro注解

@RequiresPermissions("staff-delete")//执行这个方法,需要当前用户具有staff-delete这个权限
	public String deleteBatch(){
		staffService.deleteBatch(ids);
		return LIST;
	}


二、使用shiro提供的页面标签方式进行权限控制

第一步:在jsp页面中引入shiro的标签库

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>


第二步:使用shiro 的标签控制页面元素展示

<shiro:hasPermission name="staff-delete">
	{
		id : 'button-delete',
		text : '删除',
		iconCls : 'icon-cancel',
		handler : doDelete
	},
	</shiro:hasPermission>


三、URL拦截权限控制

         <!--注入URL拦截规则 -->
		<property name="filterChainDefinitions">
			<value>
				/css/** = anon
				/js/** = anon
				/images/** = anon
				/validatecode.jsp* = anon
				/login.jsp = anon
				/userAction_login.action = anon
				/page_base_staff.action = perms["staff-list"]
				/* = authc
			</value>
		</property>

编写Realm中的授权方法

      //授权方法
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
		//获取当前登录用户对象
		User user = (User) SecurityUtils.getSubject().getPrincipal();
		// 根据当前登录用户查询数据库,获取实际对应的权限
		List<Function> list = null;
		if(user.getUsername().equals("admin")){
			DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Function.class);
			//超级管理员内置用户,查询所有权限数据
			list = functionDao.findByCriteria(detachedCriteria);
		}else{
			list = functionDao.findFunctionListByUserId(user.getId());
		}
		
		for (Function function : list) {
			info.addStringPermission(function.getCode());
		}
		return info;
	}

使用ehcache缓存权限数据

第一步:pom.xml 文件中引入 ehcache 的依赖

<!-- 引入ehcache的依赖 -->
		<dependency>
			<groupId>net.sf.ehcache</groupId>
			<artifactId>ehcache-core</artifactId>
			<version>2.6.6</version>
		</dependency>

第二步:在项目中提供ehcache的配置文件

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    <diskStore path="java.io.tmpdir"/>
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>

第三步:在spring配置文件中配置缓存管理器对象,并注入给安全管理器对象

<!-- 注册安全管理器对象 -->
	<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
		<!-- 注入自定义realm -->
		<property name="realm" ref="bosRealm"/>
		<!-- 注入缓存管理器 -->
		<property name="cacheManager" ref="cacheManager"/>
	</bean>
	
	<!-- 注册缓存管理器 -->
	<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
		<!-- 注入ehcache的配置文件 -->
		<property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>
	</bean>


铸剑团队签名:

【总监】十二春秋之,3483099@qq.com

【Master】戈稻不苍,han169@126.com

【Java开发】雨鸶,343691194@qq.com;思齐骏惠,qiangzhang1227@163.com小王子,545106057@qq.com;巡山小钻风,840260821@qq.com

【VS开发】豆点,2268800211@qq.com

【系统测试】土镜问道,847071279@qq.com;尘子与自由,695187655@qq.com

【大数据】沙漠绿洲,caozhipan@126.com;张三省,570417591@qq.com

【网络】夜孤星,11297761@qq.com

【系统运营】三石头,261453882@qq.com;平凡怪咖,591169003@qq.com

【容灾备份】秋天的雨,18568921@qq.com

【安全】保密,你懂的。

原创作者:小王子

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值