shiro安全管理器设置realm参数运行报No bean of type ‘org.apache.shiro.realm.Realm‘ found.

本小白正在学习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;
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该错误提示表明在项目中没有找到类型为 `org.apache.shiro.realm.Realm` 的 Bean。通常情况下,我们需要在 Spring Boot 的配置文件中配置一个 `Realm` 的 Bean。 您可以按照以下步骤来解决该问题: 1. 在项目中添加 Apache Shiro 的依赖,例如: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.7.1</version> </dependency> ``` 2. 在 Spring Boot 的配置文件中配置 `Realm` 的 Bean,例如: ```java @Configuration public class ShiroConfig { @Bean public Realm realm() { // 返回一个 Realm 的实现类 } @Bean public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(realm()); return securityManager; } // 其他的 Shiro 相关配置 } ``` 在上述代码中,我们定义了一个 `Realm` 的 Bean,并在 `securityManager()` 方法中将该 `Realm` 实例设置为默认的安全管理。 3. 在需要使用安全管理的地方,注入 `SecurityManager` 的 Bean,并使用该 Bean 进行相关操作,例如: ```java @RestController public class UserController { @Autowired private SecurityManager securityManager; @GetMapping("/user") public String getUser() { SecurityUtils.setSecurityManager(securityManager); // 其他的 Shiro 相关操作 } } ``` 在上述代码中,我们注入了 `SecurityManager` 的 Bean,并在 `getUser()` 方法中使用该 Bean 进行相关操作。 通过以上步骤,您应该可以解决该错误提示。如果仍然存在问题,您可以仔细检查一下代码,或者提供更多的错误信息,以便更好地定位问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值