Shiro(八):shiro 通过实例工厂方法的方式封装filterChainDefinitionMap

shiro 动态配置filterChainDefinitionMap

在之前的学习中,项目中Shiro拦截所有请求的配置是默认配置在 applicationContext.xml文件中的。shiroFilter过滤器中的定义了filterChainDefinitions。

权限管理filterChainDefinitions过滤器配置:

    <!-- 
    6.配置ShiroFilter
      6.1 id必须和web.xml文件中配置的DelegatingFilterProxy的<filter-name>一致。
      若不一致,则会抛出:NoSuchBeanDefinitionException。因为Shiro会来 IOC容器中查找和<filter-name>名字对应的filter bean。	
     -->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <property name="loginUrl" value="/toLogin"/>
        <property name="successUrl" value="/list"/>
        <property name="unauthorizedUrl" value="/unauthorized"/>
        <!-- 
                                配置哪些页面需要受保护。
                                以及访问这些页面需要的权限
           1)  anon 可以匿名访问
           2)  authc 必须认证(即登录)  之后才可以访问    
           3)  logout:登出
           4)  roles 角色过滤器
         -->
        <property name="filterChainDefinitions">
            <value>
                /toLogin = anon
                /login = anon
                /logout = logout
                
                /toAdmin = roles[admin]
                /toUser = roles[user]
                
                # everything else requires authentication:
                /** = authc
            </value>
        </property>
    </bean>

这种方式权限代码是写死的不易扩展。

下面来配置优雅简洁易扩展的 filterChainDefinitions:通过实例工厂方法的方式来创建一个 filterChainDefinitionMap。

filterChainDefinitions源码如下:
在这里插入图片描述
实现步骤如下(3步)

步骤1:创建FilterChainDefinitionMapBuilder类,编写一个方法,并返回LinkedHashMap<String, String>:

package com.example.shiro.factory;

import java.util.LinkedHashMap;

public class FilterChainDefinitionMapBuilder {
   

	/**
	 * 配置FilterChainDefinitionMap
	 * @return
	 */
	public LinkedHashMap<String, String> filterChainDefinitionMapBuilder(){
   
		LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
		//下面数据可以保存在数据库,从数据库获取得到
		map.put("/toLogin", "anon");//去登录
		map.put("/login", "anon");//登录
		map.put("/logout", "logout");//登出
		map.put("/toAdmin", "roles[admin]"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值