shiro学习笔记十三:shiro权限动态加载

一、项目说明

项目环境:jdk1.7+tomcat7+idea2018+maven+shiro1.3.2

源代码github地址:https://github.com/tmAlj/shiro/tree/master/ssms

实现目标:权限资源等数据一般都是存储在数据中,便于管理,所以这里完成从数据库中初始化权限资源等

综合实例:基于shiro的按钮级别的权限管理系统

二、权限初始化

        注:如果不从数据库中加载,则需要在配置文件中配置权限。在配置文件中配置权限资源的原理可从filterChainDefinitions的源码可知,在最后是在ShiroFilterFactoryBean中将配置的权限资源放进一个LinkedHashMap中,所以可以通过在spring初始化的时候给ShiroFilterFactoryBean注入一个放入权限资源的LinkedHashMap即可。本节所有示例基于shiro学习笔记十二:shiro权限注解

<property name="filterChainDefinitions">
	<!-- 静态资源需要设置为anon,否则找不到 -->
	<value>
		<!-- 静态资源所有都能访问 -->
		/statics/** = anon
		<!-- 登录页面所有都能访问 -->
		/login.jsp = anon
		<!-- 登录成功界面需要通过登录认证或记住我访问 -->
		/welcom.jsp = user
		<!-- 退出登录 -->
		/logout = logout
		<!-- 拥有user角色可以访问 -->
		/user.jsp = roles[user]
		<!-- 拥有admin角色可以访问 -->
		/admin.jsp = roles[admin]
	</value>
</property>

(1)配置权限Map,替换filterChainDefinitions

<!-- shiro过滤器配置,与web.xml中shiro过滤器同名 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
	<property name="securityManager" ref="securityManager"/>
	<!-- 需要登录成功后跳转的页面 -->
	<property name="loginUrl" value="login.jsp"/>
	<!-- 登录成功后跳转的页面 -->
	<property name="successUrl" value="welcom.jsp"/>
	<!-- 访问未授权页面跳转的页面 -->
	<property name="unauthorizedUrl" value="unauthor.jsp"/>

<!--&lt;!&ndash;		<property name="filterChainDefinitions">-->
		<!--&lt;!&ndash; 静态资源需要设置为anon,否则找不到 &ndash;&gt;-->
		<!--<value>-->
			<!--&lt;!&ndash; 静态资源所有都能访问 &ndash;&gt;-->
			<!--/statics/** = anon-->
			<!--&lt;!&ndash; 登录页面所有都能访问 &ndash;&gt;-->
			<!--/login.jsp = anon-->
			<!--&lt;!&ndash; 登录成功界面需要通过登录认证或记住我访问 &ndash;&gt;-->
			<!--/welcom.jsp = user-->
			<!--&lt;!&ndash; 退出登录 &ndash;&gt;-->
			<!--/logout = logout-->
			<!--&lt;!&ndash; 拥有user角色可以访问 &ndash;&gt;-->
			<!--/user.jsp = roles[user]-->
			<!--&lt;!&ndash; 拥有admin角色可以访问 &ndash;&gt;-->
			<!--/admin.jsp = roles[admin]-->
		<!--</value>-->
	<!--</property>&ndash;&gt;-->

	<!-- 初始化filterChainDefinitionMap -->
	<property name="filterChainDefinitionMap" ref="filterChainDefinitionMap"></property>

</bean>

<bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionMapBuilder" factory-method="buildFilterChainDefinitionMap"></bean>
<!-- 需要自定义FilterChainDefinitionMapBuilder类,并构造buildFilterChainDefinitionMap方法 -->
<bean id="filterChainDefinitionMapBuilder" class="com.wsd.base.FilterChainDefinitionMapBuilder"></bean>

(2)创建FilterChainDefinitionMapBuilder类

package com.wsd.base;

import java.util.LinkedHashMap;

/**
 * Created by tm on 2018/8/19.
 * 拦截器工厂类,用于构造拦截集合
 */
public class FilterChainDefinitionMapBuilder {
    public LinkedHashMap<String, String> buildFilterChainDefinitionMap() {
        LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
        // TODO 从数据库去获取,与配置文件中一致
        map.put("/statics/**", "anon");
        map.put("/login.jsp", "anon");
        map.put("/welcom.jsp", "user");
        map.put("/logout", "logout");
        map.put("/user.jsp", "roles[user]");
        map.put("/admin.jsp", "roles[admin]");
        return map;
    }
}

(3)验证是否初始化

4143617e75693975c9a0185cfb44317bb18.jpg

转载于:https://my.oschina.net/tij/blog/1930299

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值