在 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,验证安全
策略(如登录、角色检查)是否按预期工作。
以上步骤提供了一个基础框架,你可以在此基础上根据应用需求添加更多的自定义安全逻辑和功能。