下仔ke:789it.top/13472/
一、教程定位与特色
目标人群
零基础Java开发者,或需快速集成权限管理的中小型项目团队。
适合希望替代Spring Security、简化安全配置的开发者。
核心优势
低门槛:10分钟可搭建基础权限系统,4小时掌握完整框架。
实战导向:结合Spring Boot,覆盖登录认证、角色授权、加密、会话管理等全流程。
灵活集成:支持Web、微服务、单体应用,兼容MySQL、Redis等数据源。
二、核心内容结构
入门与环境搭建
开发环境:推荐IntelliJ IDEA + Maven,依赖Shiro 1.9.1、Spring Boot 2.7.0。
项目结构:
src/main/java/com/example/shirodemo/
├── config/ # Shiro配置类
├── controller/ # 控制器
├── shiro/ # 自定义Realm
└── ShiroDemoApplication.java # 启动类
核心功能实现
认证(Authentication)
通过UsernamePasswordToken实现登录,结合自定义Realm验证数据库用户。
示例代码:
java
Subject subject = SecurityUtils.getSubject();
subject.login(new UsernamePasswordToken("admin", "123456"));
授权(Authorization)
基于URL的权限控制:
java
Map<String, String> filterChain = new LinkedHashMap<>();
filterChain.put("/admin/**", "roles[admin]"); // 仅admin角色可访问
filterChain.put("/**", "authc"); // 其他路径需认证
细粒度权限检查:
java
subject.checkPermission("user:delete"); // 抛出异常若无权限
加密(Cryptography)
使用HashedCredentialsMatcher实现密码加盐存储:
java
@Bean
public HashedCredentialsMatcher hashedCredentialsMatcher() {
HashedCredentialsMatcher matcher = new HashedCredentialsMatcher("SHA-256");
matcher.setHashIterations(1024); // 迭代次数
return matcher;
}
高级功能扩展
会话管理:集成Redis实现分布式Session:
java
@Bean
public RedisCacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager();
cacheManager.setRedisManager(redisManager());
return cacheManager;
}
记住我(RememberMe):通过Cookie存储加密令牌:
java
CookieRememberMeManager rememberMeManager = new CookieRememberMeManager();
rememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
三、实战案例:智能任务管理器
需求分析
功能:任务创建、编辑、删除、多设备同步、AI推荐。
权限设计:
普通用户:任务CRUD。
管理员:用户管理、数据统计。
代码实现
自定义Realm:
java
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
String username = (String) token.getPrincipal();
User user = userService.findByUsername(username);
return new SimpleAuthenticationInfo(user, user.getPassword(), getName());
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
User user = (User) principals.getPrimaryPrincipal();
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addRole(user.getRole());
info.addStringPermissions(user.getPermissions());
return info;
}
}
Shiro配置:
java
@Configuration
public class ShiroConfig {
@Bean
public MyRealm myRealm() { return new MyRealm(); }
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(myRealm());
manager.setCacheManager(cacheManager());
return manager;
}
@Bean
public ShiroFilterFactoryBean shiroFilter() {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager());
bean.setLoginUrl("/login");
bean.setUnauthorizedUrl("/unauthorized");
Map<String, String> filterChain = new LinkedHashMap<>();
filterChain.put("/static/**", "anon");
filterChain.put("/admin/**", "roles[admin]");
filterChain.put("/**", "authc");
bean.setFilterChainDefinitionMap(filterChain);
return bean;
}
}
四、教程评价与适用场景
优势
学习曲线平缓:对比Spring Security,Shiro的API更简洁,适合快速上手。
文档完善:尚硅谷提供PPT、源码、视频三件套,社区支持活跃。
生态兼容:无缝集成Spring Boot、MyBatis、Redis等主流技术栈。
局限性
功能丰富度:Spring Security在安全维护、OAuth2支持上更全面。
集群会话:需自行配置Redis,不如Spring Session集成便捷。
推荐场景
中小型项目权限管理。
快速交付的Web应用。
非Spring生态项目(如独立JavaSE应用)。
有疑问加站长微信联系(非本文作者))
