shiro 使用bean来配置权限信息

📅 2026/7/28 17:03:44 👁️ 阅读次数 📝 编程学习
shiro 使用bean来配置权限信息

在此之前,可以先修改之前的权限配置。之前在applicationContext.xml中权限配置是:

<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="/list.jsp"/> <property name="unauthorizedUrl" value="/unauthorized.jsp"/> </property> <!-- 配置哪些页面需要受保护. 以及访问这些页面需要的权限. 1). anon 可以被匿名访问 2). authc 必须认证(即登录)后才可能访问的页面. 3). logout 登出. 4). roles 角色过滤器 --> <property name="filterChainDefinitions"> <value> /login.jsp = anon /shiro/login = anon /shiro/logout = logout /user.jsp =roles[user] /admin.jsp = roles[admin] <!--# everything else requires authentication:--> /** = authc </value> </property> </bean>

可是如果这样的话,如果要从数据库中拿到权限配置信息的话,就比较麻烦,现在,我们可以建立一个bean(里面为map来配置,方便从数据库中拿到权限配置信息):

1.先建立一个factory的包:里面写入:

filterChainDefinitionMapBuilder.java:
package com.atguigu.shiro.factory; import java.util.LinkedHashMap; //有的时候需要从数据库中拿到权限信息,则要采用这种方式。 public class filterChainDefinitionMapBuilder { //采用这种方式,方便从数据库中拿取权限信息! public LinkedHashMap<String,String> buildFilterChainDefinitionMap(){ LinkedHashMap<String, String> map = new LinkedHashMap<>(); map.put("/login.jsp","anon"); map.put("/shiro/login","anon"); map.put("/shiro/logout","logout"); map.put("/user.jsp","authc,roles[user]");//如果通过认证且角色为user map.put("/admin.jsp","authc,roles[admin]");//如果通过认证且角色为admin map.put("/list.jsp","user"); map.put("/**","authc"); return map; } }

注意,这是LinkedHashMap是有顺序的。

2.修改applicationContext.xml配置文件:

<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="/list.jsp"/> <property name="unauthorizedUrl" value="/unauthorized.jsp"/> <!--要从数据库里拿到权限信息,就要采取下面的配置--> <property name="filterChainDefinitionMap" ref="filterChainDefinitionMap"></property> <!-- 配置哪些页面需要受保护. 以及访问这些页面需要的权限. 1). anon 可以被匿名访问 2). authc 必须认证(即登录)后才可能访问的页面. 3). logout 登出. 4). roles 角色过滤器 --> <!--<property name="filterChainDefinitions">--> <!--<value>--> <!--/login.jsp = anon--> <!--/shiro/login = anon--> <!--/shiro/logout = logout--> <!--/user.jsp =roles[user]--> <!--/admin.jsp = roles[admin]--> <!--# everything else requires authentication:--> <!--/** = authc--> <!--</value>--> <!--</property>--> </bean> <!--要从数据库里拿到权限信息,就要采取下面的配置--> <!--需要配置一个bean,该bean实际上是一个map,通过实例化工厂的方式--> <bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionMapBuilder" factory-method="buildFilterChainDefinitionMap"></bean> <bean id="filterChainDefinitionMapBuilder" class="com.atguigu.shiro.factory.filterChainDefinitionMapBuilder"></bean> <bean id="shiroService" class="com.atguigu.shiro.service.ShiroService"></bean>

这样就可以完成配置了,使用效果和之前的一样。