JAVA: Spring Boot加载 Shiro 配置 >>找不到 SecurityManager

embedded/2024/11/15 4:51:24/

在 Spring Boot 应用中集成和配置 Apache Shiro 通常涉及创建一个配置类来设置 `SecurityManager`,以及定义 Shiro 的 Web 支持和必要的安全策略。下面是使用 Spring Boot 配置 Apache Shiro 的步骤:

### 1. 添加依赖
首先,确保在你的 `pom.xml` 或 `build.gradle` 文件中添加了 Apache Shiro 的依赖项。例如,如果你使用 Maven,你可以添加如下依赖:

<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.8.0</version> <!-- 请使用最新的兼容版本 -->
</dependency>
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-web</artifactId><version>1.8.0</version> <!-- 请使用最新的兼容版本 -->
</dependency>

### 2. 配置 Shiro
创建一个配置类,用于定义 Shiro 的 `SecurityManager`,以及配置 Shiro 的认证和授权策略。这个类可以使用 `@Configuration` 标记,表明它是 Spring 的一个配置类。

java">import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
import org.apache.shiro.spring.web.config.ShiroWebFilterConfiguration;
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;@Configuration
public class ShiroConfig {@Beanpublic SecurityManager securityManager() {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();// 配置Realm,可以是自定义的Realm,处理登录和授权等return securityManager;}@Beanpublic ShiroFilterChainDefinition shiroFilterChainDefinition() {DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();// 配置路径过滤规则,例如认证、授权等chainDefinition.addPathDefinition("/admin/**", "authc, roles[admin]");chainDefinition.addPathDefinition("/login*", "anon");chainDefinition.addPathDefinition("/**", "authc");return chainDefinition;}// 创建 ShiroFilterFactoryBean,它是 Shiro 与 Spring Boot 集成的桥梁@Beanpublic ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager, ShiroFilterChainDefinition shiroFilterChainDefinition) {ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();shiroFilter.setSecurityManager(securityManager);shiroFilter.setFilterChainDefinitionMap(shiroFilterChainDefinition.getFilterChainMap());shiroFilter.setLoginUrl("/login");shiroFilter.setSuccessUrl("/index");shiroFilter.setUnauthorizedUrl("/unauthorized");return shiroFilter;}
}

### 3. 配置 Realm
`Realm` 是 Shiro 连接到应用程序安全数据的桥梁,如用户帐户等。通常你需要实现你自己的 `Realm`:

java">import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.subject.PrincipalCollection;public class MyCustomRealm extends AuthorizingRealm {@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {// 此处编写获取用户信息的逻辑return new SimpleAuthenticationInfo("user", "password", getName());}
}

将此 `Realm` 集成到你的 `SecurityManager` 配置中。

### 4. 启动类中激活配置
确保 Spring Boot 的主类(带有 `@SpringBootApplication` 注解的类)能够通过组件扫描找到这个配置类。通常,这不需要额外的步骤,只要配置类在相同的包或子包中。

### 5. 测试配置
启动你的 Spring Boot 应用并访问不同的 URL,验证安全

策略(如登录、角色检查)是否按预期工作。

以上步骤提供了一个基础框架,你可以在此基础上根据应用需求添加更多的自定义安全逻辑和功能。


http://www.ppmy.cn/embedded/27611.html

相关文章

Fast-DetectGPT 无需训练的快速文本检测

本文提出了一种新的文本检测方法 ——Fast-DetectGPT&#xff0c;无需训练&#xff0c;直接使用开源小语言模型检测各种大语言模型&#xff0c;如GPT等生成的文本内容。 Fast-DetectGPT 将检测速度提高了 340 倍&#xff0c;将检测准确率相对提升了 75%&#xff0c;超过商用系…

源码篇--Nacos服务--中章(8):Nacos服务端感知客户端实例变更-3

文章目录 前言一、客户端实例变更&#xff1a;二、实例变更感知&#xff1a;2.1 实例注册信息通知&#xff1a;2.1.1 接收DistroDataRequest 请求&#xff1a;2.1.2 onReceive 处理请求&#xff1a;2.1.3 processData 处理请求&#xff1a;2.1.4 handlerClientSyncData 处理数据…

服务器数据恢复—存储硬盘坏道,指示灯亮黄色的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 一台某品牌EqualLogic PS系列某型号存储&#xff0c;存储中有一组由16块SAS硬盘组建的RAID5磁盘阵列&#xff0c;RAID5上划分VMFS文件系统存放虚拟机文件。存储系统上层一共分了4个卷。 raid5阵列中磁盘出现故障&#xff0c;有2块硬盘…

HTTP 与 HTTPS

HTTP 浅谈 HTTP HTTPS 浅谈 HTTPS HTTP 与 HTTPS区别 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hyper Text Transfer Protocol Secure&#xff09;在多个方面存在显著的区别&#xff0c;这些区别主要体现在以下几个方面&#xff1a; 特…

Rust学习03:解决了如何更改项目名称的小问题

好不容易跑通了第一个小程序&#xff01; 高兴之余&#xff0c;突然又对小程序的名字不满意了&#xff0c;想改一个更好的。奇怪么&#xff1f;不奇怪&#xff01;对于一位想不开而来自学Rust的人又有什么事情是做不出的呐~~ 开始我是直接改了项目文件夹的名字~捅了马蜂窝了&am…

基于Python的在线学习与推荐系统设计与实现(论文+源码)-kaic

题目&#xff1a;在线学习与推荐系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本在线学习与推荐系统就是在这样的大环境下诞生&#xff0…

【树——数据结构】

文章目录 1.基本概念2.基本术语1.结点之间的关系描述2.结点&#xff0c;树的属性描述3.有序树&#xff0c;无序树4.森林 3.树的性质考点1考点2考点3考点4 4.树的存储结构5.树和森林的遍历 1.基本概念 结点&#xff0c;根节点&#xff0c;分支结点&#xff0c;叶子结点&#xf…

RabbitMQ是如何保证消息不被重复消费,或者说是如何保证消息消费时的幂等性的

目录 面试官:RabbitMQ是如何保证消息不被重复消费?或者说是如何保证消息消费时的幂等性的1. 使用唯一业务标识2. 使用RabbitMQ的消息去重插件3. 使用业务逻辑实现幂等性4. 使用消息属性和死信队列5. 使用Spring Boot的重试机制该文章专注于面试,面试只要回答关键点即可,不需…