要在Spring Boot项目中集成Apache Shiro框架,可以按照以下步骤进行操作:
- 添加依赖:在
pom.xml
文件中添加Shiro和Spring Boot Shiro相关的依赖。例如:
org.apache.shiro shiro-spring-boot-starter 1.7.1
- 配置Shiro:创建一个Shiro配置类,例如
ShiroConfig.java
,并使用@Configuration
注解进行标注。在这个类中,你可以配置Shiro的各种组件,如SecurityManager
、Realm
、Filter
等。例如:
@Configuration public class ShiroConfig { @Bean public SecurityManager securityManager(CustomRealm customRealm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(customRealm); return securityManager; } @Bean public CustomRealm customRealm() { return new CustomRealm(); } @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) { ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); // 配置过滤器链 MapfilterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/admin/**", "authc"); filterChainDefinitionMap.put("/**", "anon"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilterFactoryBean; } }
在上面的示例中,CustomRealm
是一个自定义的Realm类,用于处理身份验证和授权逻辑。ShiroFilterFactoryBean
用于配置过滤器链,定义了哪些URL需要认证和授权。
- 自定义Realm:实现
org.apache.shiro.realm.AuthorizingRealm
接口,创建一个自定义的Realm类。在这个类中,你可以实现doGetAuthenticationInfo
和doGetAuthorizationInfo
方法,分别用于处理身份验证和授权逻辑。例如:
public class CustomRealm extends AuthorizingRealm { @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // 获取用户名和密码 String username = (String) token.getPrincipal(); String password = new String((char[]) token.getCredentials()); // 查询用户信息 User user = userService.findByUsername(username); if (user == null || !user.getPassword().equals(password)) { throw new UnknownAccountException("用户名或密码错误"); } return new SimpleAuthenticationInfo(user.getUsername(), user.getPassword(), getName()); } @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { // 获取用户角色和权限 String username = (String) principals.getPrimaryPrincipal(); User user = userService.findByUsername(username); Listroles = user.getRoles(); List permissions = user.getPermissions(); // 创建授权信息对象 SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); authorizationInfo.setRoles(roles); authorizationInfo.setStringPermissions(permissions); return authorizationInfo; } }
在上面的示例中,userService
是一个自定义的服务类,用于查询用户信息。
- 启用Shiro:在你的Spring Boot主类上添加
@EnableShiro
注解,以启用Shiro集成。例如:
@SpringBootApplication @EnableShiro public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
完成以上步骤后,你的Spring Boot项目就成功集成了Apache Shiro框架,并可以进行身份验证和授权操作了。你可以根据具体需求对Shiro进行进一步的配置和扩展。