本小白正在学习b站大佬的shiro课程时,学习到shiroConfig配置类的时候,给安全管理器设置realm出现了问题。
学习链接:
https://www.bilibili.com/video/BV1uz4y197Zm?p=14
package com.baizhi.config;
import com.baizhi.shiro.realms.CustomerRealm;
import org.apache.shiro.realm.Realm;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;
/**
* @Author: 正是炎
* @Create: 2021/12/7/21:26
* @Description:整合shiro框架相关的配置类
*/
@Configuration
public class ShiroConfig {
//1.创建shiroFilter 负责拦截所有请求
@Bean
public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
//给filter设置安全管理器
shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);
//配置系统受限资源
Map<String,String> map= new HashMap<>();
map.put("/index.jsp","authc");//key是资源路径,value是authc表示这个资源需要认证和授权
shiroFilterFactoryBean.setFilterChainDefinitionMap(map);
//配置系统公共资源
return shiroFilterFactoryBean;
}
//2.创建securityManager(安全管理器)//进行 认证授权 管理
@Bean
public DefaultWebSecurityManager getDefaultWebSecurityManager(Realm realm){
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
//给安全管理器设置realm
defaultWebSecurityManager.setRealm(realm);
return defaultWebSecurityManager;
}
//3.创建自定义realm //与数据库连接
@Bean
public Realm getRealm(){
CustomerRealm customerRealm = new CustomerRealm();
return customerRealm;
}
}
程序不能正常运行
打开右侧Maven Projects,点击install一下,程序可以正常运行了,但是权限功能无法正常运作
终于在评论区里找到了解决方案:安全管理器里参数不设置了,直接调用getRealm()方法。解决
//2.创建securityManager(安全管理器)//进行 认证授权 管理
@Bean
public DefaultWebSecurityManager getDefaultWebSecurityManager(){
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
//给安全管理器设置realm
defaultWebSecurityManager.setRealm(getRealm());
return defaultWebSecurityManager;
}