使用Spring Boot、Shiro和MySQL实现用户认证和授权
概述
在本文中,我将向你介绍如何在Spring Boot项目中使用Shiro和MySQL来实现用户认证和授权的功能。Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密、会话管理等功能,可以帮助我们快速构建安全可靠的应用程序。
流程图
flowchart TD
A[创建Spring Boot项目] --> B[配置pom.xml文件]
B --> C[创建数据库表]
C --> D[编写Shiro配置类]
D --> E[编写User实体类]
E --> F[编写UserService接口和实现类]
F --> G[编写UserController]
G --> H[编写登录页面和首页]
步骤
1. 创建Spring Boot项目
首先,我们需要创建一个新的Spring Boot项目。你可以使用IDE或者使用Spring Initializer来创建项目。在创建项目时,需要添加相关的依赖项,包括spring-boot-starter-web、spring-boot-starter-data-jpa、spring-boot-starter-thymeleaf、mysql-connector-java和shiro-spring-boot-starter等。
2. 配置pom.xml文件
在项目的pom.xml文件中,需要添加Shiro和MySQL的依赖项。你可以在Shiro官方网站或者Maven中央仓库中找到最新的版本。
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Data JPA Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- Spring Boot Thymeleaf Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Shiro Starter -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<version>1.7.1</version>
</dependency>
</dependencies>
3. 创建数据库表
我们需要创建一个名为"users"的表,用于存储用户信息。表中需要包含id、username和password字段。你可以使用MySQL的命令行或者图形化工具来创建表。
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL
);
4. 编写Shiro配置类
在src/main/java目录下创建一个名为ShiroConfig的类,用于配置Shiro的相关设置。首先,我们需要注入一个SecurityManager实例,并将其设置为Spring的默认安全管理器。
@Configuration
public class ShiroConfig {
@Bean
public SecurityManager securityManager(UserRealm userRealm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm);
return securityManager;
}
}
5. 编写User实体类
在src/main/java目录下创建一个名为User的实体类,用于表示用户信息。我们需要为该类添加id、username和password字段,并添加相应的getter和setter方法。
@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
private String password;
// 省略getter和setter方法
}
6. 编写UserService接口和实现类
在src/main/java目录下创建一个名为UserService的接口,用于定义用户相关的操作。我们需要添加一个findByUsername方法,用于根据用户名查找用户信息。
public interface UserService {
User findByUsername(String username);
}
在src/main/java目录下创建一个名为UserServiceImpl的实现类,用于实现UserService接口。我们需要注入一个UserRepository实例,并在findByUsername方法中使用该实例来查询用户信息。
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
public