# SpringBoot+SpringJPA+Swagger+Shiro 快速搭建前后端分离的权限管理系统
前前后端分离,一般都是通过 token\实现,本项目也是一样;用户登录时,生成 token 及 token 过期时间,token 与用户是一一对应关系,调用接口的时候,把\token\放到\header 或 请求参数\中,服务端就知道是谁在调用接口。
# Let's do it!!
![](https://www.writebug.com/myres/static/uploads/2021/12/6/1c28ba4b1ff1a439b9da171849dfb360.writebug)
介绍:这次我们使用 Shiro 快速搭建前后端分离的权限管理系统 利用 JPA 帮我们管理数据库,Swagger Knife4j 帮我搭建 Web 测试环境;
后台基于 SpringBoot JPA Knife4j Shiro
前端基于 VUE ElementUI
注意:主要观察 token 的使用方法!
## 第一步:新建工程
pom 文件 application.yml 巴拉巴拉这里省略,这里贴出需要用到的依赖:
```html
<!--starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--validation-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!--JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--JDBC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- shiro-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!--mysql-connector-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- swagger -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.8.0.RELEASE</version>
</dependency>
<!-- knife4j -->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.2</version>
</dependency>
<!-- commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
```
## 第二步:准备好要用的包包和类类
![](https://www.writebug.com/myres/static/uploads/2021/12/6/bb76cd0e171d9e58c266cd661008833f.writebug)
## 第三步:编写登陆入口
为了方便这里不做密码加盐加密:
```java
@RestController
public class ShiroController {
private final ShiroService shiroService;
public ShiroController(ShiroService shiroService) {
this.shiroService = shiroService;
}
/**
* 登录
*/
@ApiOperation(value = "登陆", notes = "参数:用户名 密码")
@PostMapping("/sys/login")
public Map<String, Object> login(@RequestBody @Validated LoginDTO loginDTO, BindingResult bindingResult) {
Map<String, Object> result = new HashMap<>();
if (bindingResult.hasErrors()) {
result.put("status", 400);
result.put("msg", bindingResult.getFieldError().getDefaultMessage());
return result;
}
String username = loginDTO.getUsername();
String password = loginDTO.getPassword();
//用户信息
User user = shiroService.findByUsername(username);
//账号不存在、密码错误
if (user == null || !user.getPassword().equals(password)) {
result.put("status", 400);
result.put("msg", "账号或密码有误");
} else {
//生成token,并保存到数据库
result = shiroService.createToken(user.getUserId());
result.put("status", 200);
result.put("msg", "登陆成功");
}
return result;
}
/**
* 退出
*/
@ApiOperation(value = "登出", notes = "参数:token")
@PostMapping("/sys/logout")
public Map<String, Object> logout(@RequestHeader("token")String token) {
Map<String, Object> result = new HashMap<>();
shiroService.logout(token);
result.put("status", 200);
result.put("msg", "您已安全退出系统");
return result;
}
}
```
## 第四步:编写 ShiroService 中的方法
主要是生成一个 token 返回给前端。
```java
/**
* @Author 大誌
* @Date 2019/3/30 22:18
* @Version 1.0
*/
@Service
public class ShiroServiceImpl implements ShiroService {
@Autowired
private UserRepository userRepository;
@Autowired
private SysTokenRepository sysTokenRepository;
/**
* 根据username查找用户
*
* @param username
* @return User
*/
@Override
public User findByUsername(String username) {
User user = userRepository.findByUsername(username);
return user;
}
//12小时后过期
private final static int EXPIRE = 3600 * 12;
@Override
/**
* 生成一个token
*@param [userId]
*@return Result
*/
public Map<String, Object> createToken(Integer userId) {
Map<String, Object> result = new HashMap<>();
//生成一个token
String token = TokenGenerator.generateValue();
//当前时间
Date now = new Date();
//过期时间
Date expireTime = new Date(now.getTime() + EXPIRE * 1000);
//判断是否生成过token
SysToken tokenEntity = sysTokenRepository.findByUserId(userId);
if (tokenEntity == null) {
tokenEntity = new SysToken();
tokenEntity.setUserId(userId);
tokenEntity.setToken(token);
tokenEntity.setUpdateTime(now);
tokenEntity.setExpireTime(expireTime);
//保存token
sysTokenRepository.save(tokenEntity);
} else {
tokenEntity.setToken(token);
tokenEntity.setUpdateTime(now);
tokenEntity.setExpireTime(expireTime);
//更新token
sysTokenRepository.save(tokenEntity);
}
result.put("token", token);
result.put("expire", EXPIRE);
return result;
}
@Override
public void logout(String token) {
SysToken byToken = findByToken(token);
//生成一个token
token = TokenGenerator.generateValue();
//修改token
SysToken tokenEntity = new SysToken();
tokenEntity.setUserId(byToken.getUserId());
tokenEntity.setToken(token);
sysTokenRepository.save(tokenEntity);
}
@Override
public SysToken findByToken(String accessToken) {
return sysTokenRepository.findByToken(accessToken);
}
@Override
public User findByUserId(Integer userI
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot+SpringJPA+Swagger+Shiro 快速搭建前后端分离的权限管理系统 完整毕设
共152个文件
xml:117个
java:25个
md:2个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 129 浏览量
2023-03-06
10:36:05
上传
评论
收藏 99KB ZIP 举报
温馨提示
SpringBoot+SpringJPA+Swagger+Shiro 快速搭建前后端分离的权限管理系统 介绍:这次我们使用 Shiro 快速搭建前后端分离的权限管理系统 利用 JPA 帮我们管理数据库,Swagger Knife4j 帮我搭建 Web 测试环境; 后台基于 SpringBoot JPA Knife4j Shiro 前端基于 VUE ElementUI
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot+SpringJPA+Swagger+Shiro 快速搭建前后端分离的权限管理系统 完整毕设 (152个子文件)
mvnw.cmd 6KB
.gitignore 117B
shiro-demo.iml 13KB
MavenWrapperDownloader.java 5KB
AuthFilter.java 4KB
ShiroServiceImpl.java 3KB
TestController.java 3KB
AuthRealm.java 3KB
ShiroController.java 3KB
ShiroConfig.java 3KB
SwaggerConfig.java 2KB
MyExceptionHandler.java 1KB
TokenGenerator.java 1KB
ShiroService.java 929B
HttpContextUtil.java 920B
User.java 750B
Role.java 677B
SysToken.java 660B
TokenUtil.java 607B
AuthToken.java 571B
SysTokenRepository.java 568B
Permission.java 411B
UserRepository.java 401B
ShiroDemoApplicationTests.java 354B
ShiroDemoApplication.java 336B
PermissionRepository.java 335B
LoginDTO.java 334B
RoleRepository.java 317B
LICENSE 1KB
README.md 34KB
HELP.md 196B
mvnw 9KB
maven-wrapper.properties 116B
shirodemo.sql 5KB
uiDesigner.xml 9KB
pom.xml 4KB
Project_Default.xml 1KB
compiler.xml 801B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_0_RELEASE.xml 757B
Maven__org_springframework_boot_spring_boot_starter_validation_2_1_0_RELEASE.xml 757B
Maven__org_springframework_boot_spring_boot_starter_data_jpa_2_1_0_RELEASE.xml 743B
Maven__org_springframework_boot_spring_boot_starter_logging_2_1_0_RELEASE.xml 736B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_0_RELEASE.xml 729B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_0_RELEASE.xml 722B
Maven__org_hibernate_common_hibernate_commons_annotations_5_0_4_Final.xml 720B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_9_7.xml 717B
Maven__org_springframework_boot_spring_boot_starter_jdbc_2_1_0_RELEASE.xml 715B
Maven__org_springframework_boot_spring_boot_starter_json_2_1_0_RELEASE.xml 715B
Maven__org_springframework_boot_spring_boot_starter_test_2_1_0_RELEASE.xml 715B
Maven__org_springframework_plugin_spring_plugin_metadata_1_2_0_RELEASE.xml 709B
Maven__org_springframework_boot_spring_boot_starter_aop_2_1_0_RELEASE.xml 708B
Maven__org_springframework_boot_spring_boot_starter_web_2_1_0_RELEASE.xml 708B
Maven__com_github_xiaoymin_knife4j_spring_boot_autoconfigure_2_0_2.xml 702B
Maven__com_spring4all_swagger_spring_boot_starter_1_8_0_RELEASE.xml 696B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 688B
Maven__org_springframework_plugin_spring_plugin_core_1_2_0_RELEASE.xml 681B
Maven__org_springframework_boot_spring_boot_starter_2_1_0_RELEASE.xml 680B
Maven__org_springframework_data_spring_data_commons_2_1_2_RELEASE.xml 680B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_9_7.xml 676B
Maven__org_hibernate_validator_hibernate_validator_6_0_13_Final.xml 669B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_9_7.xml 662B
Maven__com_github_xiaoymin_knife4j_spring_boot_starter_2_0_2.xml 660B
Maven__org_springframework_boot_spring_boot_test_2_1_0_RELEASE.xml 659B
Maven__org_springframework_data_spring_data_jpa_2_1_2_RELEASE.xml 652B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_12.xml 648B
Maven__org_springframework_spring_expression_5_1_2_RELEASE.xml 646B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_9_0.xml 632B
Maven__org_springframework_spring_context_5_1_2_RELEASE.xml 625B
Maven__org_springframework_spring_aspects_5_1_2_RELEASE.xml 625B
Maven__org_springframework_boot_spring_boot_2_1_0_RELEASE.xml 624B
Maven__com_alibaba_druid_spring_boot_starter_1_1_10.xml 621B
Maven__org_springframework_spring_webmvc_5_1_2_RELEASE.xml 618B
Maven__io_springfox_springfox_bean_validators_2_9_2.xml 618B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_12.xml 613B
Maven__org_springframework_spring_beans_5_1_2_RELEASE.xml 611B
Maven__com_fasterxml_jackson_core_jackson_databind_2_9_7.xml 611B
Maven__io_springfox_springfox_swagger_common_2_9_2.xml 611B
Maven__org_springframework_spring_core_5_1_2_RELEASE.xml 604B
Maven__org_springframework_spring_test_5_1_2_RELEASE.xml 604B
Maven__org_springframework_spring_jdbc_5_1_2_RELEASE.xml 604B
Maven__com_github_xiaoymin_knife4j_annotations_2_0_2.xml 604B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_12.xml 599B
Maven__javax_annotation_javax_annotation_api_1_3_2.xml 599B
Maven__javax_activation_javax_activation_api_1_2_0.xml 599B
Maven__javax_validation_validation_api_2_0_1_Final.xml 599B
Maven__org_springframework_spring_orm_5_1_2_RELEASE.xml 597B
Maven__org_springframework_spring_jcl_5_1_2_RELEASE.xml 597B
Maven__org_springframework_spring_web_5_1_2_RELEASE.xml 597B
Maven__org_springframework_spring_aop_5_1_2_RELEASE.xml 597B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_1.xml 596B
Maven__javax_persistence_javax_persistence_api_2_2.xml 596B
Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml 596B
Maven__javax_transaction_javax_transaction_api_1_3.xml 596B
Maven__org_springframework_spring_tx_5_1_2_RELEASE.xml 590B
Maven__com_github_xiaoymin_knife4j_spring_ui_2_0_2.xml 590B
Maven__org_hibernate_hibernate_core_5_3_7_Final.xml 587B
Maven__io_springfox_springfox_swagger_ui_2_9_2.xml 583B
Maven__com_fasterxml_jackson_core_jackson_core_2_9_7.xml 583B
Maven__io_springfox_springfox_spring_web_2_9_2.xml 583B
Maven__commons_beanutils_commons_beanutils_1_8_3.xml 582B
共 152 条
- 1
- 2
资源评论
甜辣uu
- 粉丝: 8383
- 资源: 1103
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功