1.创建一个类,把权限放进Map当中
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]");
map.put("/admin.jsp", "authc,roles[admin]");
map.put("/list.jsp", "user");
map.put("/**", "authc");
return map;
}
}
2.再到spring配置文件中配置工厂bean:
非静态方法的注入方式:https://blog.csdn.net/qq_36468169/article/details/102828103
<!-- 配置一个 bean, 该 bean 实际上是一个 Map. 通过实例工厂方法的方式
factory-bean:用于实例化工厂类;
factory-method:用于调用工厂类方法。-->
<bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionBulider"
factory-method="filterChainDefinitionMethod"></bean>
<bean id="filterChainDefinitionBulider"
class="com.yang.shiro.factory.FilterChainDefinitionBulider"></bean>
3.再把这工厂bean配置给 shiroFilter:
<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>