赞
踩
在 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 的一个配置类。
- 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 {
-
- @Bean
- public SecurityManager securityManager() {
- DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
- // 配置Realm,可以是自定义的Realm,处理登录和授权等
- return securityManager;
- }
-
- @Bean
- public 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 集成的桥梁
- @Bean
- public 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`:
- 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 {
- @Override
- protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
- // 此处编写获取用户信息的逻辑
- return new SimpleAuthenticationInfo("user", "password", getName());
- }
- }
将此 `Realm` 集成到你的 `SecurityManager` 配置中。
### 4. 启动类中激活配置
确保 Spring Boot 的主类(带有 `@SpringBootApplication` 注解的类)能够通过组件扫描找到这个配置类。通常,这不需要额外的步骤,只要配置类在相同的包或子包中。
### 5. 测试配置
启动你的 Spring Boot 应用并访问不同的 URL,验证安全
策略(如登录、角色检查)是否按预期工作。
以上步骤提供了一个基础框架,你可以在此基础上根据应用需求添加更多的自定义安全逻辑和功能。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。