Spring Boot与Shiro集成实践详解
需积分: 3 98 浏览量
更新于2024-10-11
收藏 30KB RAR 举报
资源摘要信息:"SpringBoot整合Shiro实践操作"
Shiro(发音为"shee-roe")是一个功能强大的安全框架,用于实现身份验证、授权、密码学以及会话管理。Shiro可以轻松地集成到任何Java应用程序中,无论其大小和复杂性如何。Spring Boot是一个流行的Java框架,旨在简化新的Spring应用的初始搭建以及开发过程。当Spring Boot与Shiro结合时,可以迅速构建一个安全的、生产级的Spring应用。
### 一、整合Shiro前的准备工作
#### 1. 项目结构
在整合Shiro之前,我们需要准备一个标准的Spring Boot项目结构。通常包含以下部分:
- `src/main/java`:存放Java源代码,包括实体类、服务类、控制器等。
- `src/main/resources`:存放配置文件、模板文件、静态资源等。
- `src/test/java`:存放测试代码。
#### 2. 添加依赖
在`pom.xml`文件中,需要添加Spring Boot和Shiro相关的依赖,例如:
```xml
<dependencies>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Shiro Core -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<!-- Shiro Spring Boot Starter -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.4.0</version>
</dependency>
<!-- 其他依赖... -->
</dependencies>
```
### 二、Shiro配置
#### 1. 创建Shiro配置类
创建一个配置类来配置Shiro的各个组件。
```java
@Configuration
public class ShiroConfig {
// 创建SecurityManager
@Bean
public SecurityManager securityManager(UserRealm userRealm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm);
return securityManager;
}
// 创建Realm
@Bean
public UserRealm userRealm() {
return new UserRealm();
}
// ShiroFilterFactoryBean处理拦截资源文件问题
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 配置访问权限
Map<String, String> filterChainDefinitionMap = new HashMap<>();
filterChainDefinitionMap.put("/login", "anon"); // 表示可以匿名访问
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/admin/**", "authc"); // 表示需要认证才可以访问
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
// Shiro的会话管理
// Shiro的会话管理
@Bean
public DefaultWebSessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
// 设置session超时时间
sessionManager.setGlobalSessionTimeout(1800000);
return sessionManager;
}
// 其他配置...
}
```
### 三、用户认证与授权
#### 1. 创建自定义的Realm
在Shiro中,Realm负责与安全数据源交互,进行身份验证和授权。
```java
public class UserRealm extends AuthorizingRealm {
@Autowired
private UserService userService; // 自定义的用户服务
// 用户授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
// 获取当前登录的用户
User user = (User) principals.getPrimaryPrincipal();
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
// 添加角色和权限
authorizationInfo.addRole(user.getRole());
authorizationInfo.addStringPermission(user.getPermission());
return authorizationInfo;
}
// 用户认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
// 获取登录用户名
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
String username = token.getUsername();
// 根据用户名查询用户信息
User user = userService.findByUsername(username);
if (user == null) {
throw new UnknownAccountException("用户名或密码错误!");
}
// 密码匹配
SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
user, // 用户对象
user.getPassword(), // 密码
getName() // realm name
);
return authenticationInfo;
}
}
```
#### 2. 控制器中使用Shiro注解
在控制器中,我们可以通过Shiro提供的注解来控制访问权限。
```java
@RestController
@RequestMapping("/admin")
public class AdminController {
@GetMapping("/info")
@RequiresPermissions("user:list")
public String getInfo() {
return "用户信息展示";
}
@GetMapping("/login")
public String login() {
return "登录页面";
}
@GetMapping("/logout")
@RequiresAuthentication
public String logout() {
return "退出登录";
}
// 其他方法...
}
```
### 四、运行测试
#### 1. 运行Spring Boot应用
在完成了以上配置和编码后,我们可以运行Spring Boot应用,并通过浏览器访问不同的路径来测试认证与授权是否按预期工作。
### 五、问题排查
#### 1. 日志配置
Shiro的日志配置对于调试和问题排查非常有帮助,确保在`application.properties`或`application.yml`中配置了日志级别。
### 总结
通过本实践操作的介绍,我们了解了如何将Spring Boot和Shiro框架进行整合,并实现用户的认证与授权。整合后,我们能够保护应用的安全,只有具备相应权限的用户才能访问特定的资源。Shiro提供的简单易用的API和灵活的配置方式,使其成为Java应用中实现安全的不二选择。
2019-05-22 上传
2018-08-28 上传
2023-09-26 上传
2023-08-30 上传
2023-04-11 上传
2023-03-16 上传
2023-03-16 上传
2023-03-16 上传
2023-09-09 上传
风雨无阻1203
- 粉丝: 584
- 资源: 39
最新资源
- 新型智能电加热器:触摸感应与自动温控技术
- 社区物流信息管理系统的毕业设计实现
- VB门诊管理系统设计与实现(附论文与源代码)
- 剪叉式高空作业平台稳定性研究与创新设计
- DAMA CDGA考试必备:真题模拟及章节重点解析
- TaskExplorer:全新升级的系统监控与任务管理工具
- 新型碎纸机进纸间隙调整技术解析
- 有腿移动机器人动作教学与技术存储介质的研究
- 基于遗传算法优化的RBF神经网络分析工具
- Visual Basic入门教程完整版PDF下载
- 海洋岸滩保洁与垃圾清运服务招标文件公示
- 触摸屏测量仪器与粘度测定方法
- PSO多目标优化问题求解代码详解
- 有机硅组合物及差异剥离纸或膜技术分析
- Win10快速关机技巧:去除关机阻止功能
- 创新打印机设计:速释打印头与压纸辊安装拆卸便捷性