当前位置:   article > 正文

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

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

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

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

  1. <dependency>
  2.     <groupId>org.apache.shiro</groupId>
  3.     <artifactId>shiro-spring</artifactId>
  4.     <version>1.8.0</version> <!-- 请使用最新的兼容版本 -->
  5. </dependency>
  6. <dependency>
  7.     <groupId>org.apache.shiro</groupId>
  8.     <artifactId>shiro-web</artifactId>
  9.     <version>1.8.0</version> <!-- 请使用最新的兼容版本 -->
  10. </dependency>

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

  1. import org.apache.shiro.mgt.SecurityManager;
  2. import org.apache.shiro.spring.web.config.DefaultShiroFilterChainDefinition;
  3. import org.apache.shiro.spring.web.config.ShiroFilterChainDefinition;
  4. import org.apache.shiro.spring.web.config.ShiroWebFilterConfiguration;
  5. import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
  6. import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. @Configuration
  10. public class ShiroConfig {
  11.     @Bean
  12.     public SecurityManager securityManager() {
  13.         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
  14.         // 配置Realm,可以是自定义的Realm,处理登录和授权等
  15.         return securityManager;
  16.     }
  17.     @Bean
  18.     public ShiroFilterChainDefinition shiroFilterChainDefinition() {
  19.         DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
  20.         // 配置路径过滤规则,例如认证、授权等
  21.         chainDefinition.addPathDefinition("/admin/**", "authc, roles[admin]");
  22.         chainDefinition.addPathDefinition("/login*", "anon");
  23.         chainDefinition.addPathDefinition("/**", "authc");
  24.         return chainDefinition;
  25.     }
  26.     // 创建 ShiroFilterFactoryBean,它是 Shiro 与 Spring Boot 集成的桥梁
  27.     @Bean
  28.     public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager, ShiroFilterChainDefinition shiroFilterChainDefinition) {
  29.         ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
  30.         shiroFilter.setSecurityManager(securityManager);
  31.         shiroFilter.setFilterChainDefinitionMap(shiroFilterChainDefinition.getFilterChainMap());
  32.         shiroFilter.setLoginUrl("/login");
  33.         shiroFilter.setSuccessUrl("/index");
  34.         shiroFilter.setUnauthorizedUrl("/unauthorized");
  35.         return shiroFilter;
  36.     }
  37. }

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

  1. import org.apache.shiro.realm.AuthorizingRealm;
  2. import org.apache.shiro.authc.AuthenticationException;
  3. import org.apache.shiro.authc.AuthenticationInfo;
  4. import org.apache.shiro.authc.AuthenticationToken;
  5. import org.apache.shiro.authc.SimpleAuthenticationInfo;
  6. import org.apache.shiro.subject.PrincipalCollection;
  7. public class MyCustomRealm extends AuthorizingRealm {
  8.     @Override
  9.     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
  10.         // 此处编写获取用户信息的逻辑
  11.         return new SimpleAuthenticationInfo("user", "password", getName());
  12.     }
  13. }

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/506045?site
推荐阅读
相关标签
  

闽ICP备14008679号