├── .gitignore
├── README.md
├── pom.xml
├── sangeng-admin
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── com
│ │ └── sangeng
│ │ ├── BlogAdminApplication.java
│ │ ├── config
│ │ └── SecurityConfig.java
│ │ ├── controller
│ │ ├── ArticleController.java
│ │ ├── CategoryController.java
│ │ ├── LinkController.java
│ │ ├── LoginController.java
│ │ ├── MenuController.java
│ │ ├── RoleController.java
│ │ ├── TagController.java
│ │ ├── UploadController.java
│ │ └── UserController.java
│ │ └── filter
│ │ └── JwtAuthenticationTokenFilter.java
│ └── resources
│ └── application.yml
├── sangeng-blog
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── com
│ │ │ └── sangeng
│ │ │ ├── SanGengBlogApplication.java
│ │ │ ├── config
│ │ │ ├── SecurityConfig.java
│ │ │ └── SwaggerConfig.java
│ │ │ ├── controller
│ │ │ ├── ArticleController.java
│ │ │ ├── BlogLoginController.java
│ │ │ ├── CategoryController.java
│ │ │ ├── CommentController.java
│ │ │ ├── LinkController.java
│ │ │ ├── UploadController.java
│ │ │ └── UserController.java
│ │ │ ├── filter
│ │ │ └── JwtAuthenticationTokenFilter.java
│ │ │ ├── job
│ │ │ ├── TestJob.java
│ │ │ └── UpdateViewCountJob.java
│ │ │ └── runner
│ │ │ ├── TestRunner.java
│ │ │ └── ViewCountRunner.java
│ └── resources
│ │ └── application.yml
│ └── test
│ └── java
│ └── com
│ └── sangeng
│ └── OSSTest.java
└── sangeng-framework
├── pom.xml
└── src
└── main
├── java
└── com
│ └── sangeng
│ ├── annotation
│ └── SystemLog.java
│ ├── aspect
│ └── LogAspect.java
│ ├── config
│ ├── FastJsonRedisSerializer.java
│ ├── MbatisPlusConfig.java
│ ├── RedisConfig.java
│ └── WebConfig.java
│ ├── constants
│ └── SystemConstants.java
│ ├── domain
│ ├── ResponseResult.java
│ ├── dto
│ │ ├── AddArticleDto.java
│ │ ├── AddCommentDto.java
│ │ ├── AddTagDto.java
│ │ ├── ArticleDto.java
│ │ ├── ChangeRoleStatusDto.java
│ │ ├── EditTagDto.java
│ │ └── TagListDto.java
│ ├── entity
│ │ ├── Article.java
│ │ ├── ArticleTag.java
│ │ ├── Category.java
│ │ ├── Comment.java
│ │ ├── Link.java
│ │ ├── LoginUser.java
│ │ ├── Menu.java
│ │ ├── Role.java
│ │ ├── RoleMenu.java
│ │ ├── Tag.java
│ │ ├── User.java
│ │ └── UserRole.java
│ └── vo
│ │ ├── AdminUserInfoVo.java
│ │ ├── ArticleDetailVo.java
│ │ ├── ArticleListVo.java
│ │ ├── ArticleVo.java
│ │ ├── BlogUserLoginVo.java
│ │ ├── CategoryVo.java
│ │ ├── CommentVo.java
│ │ ├── ExcelCategoryVo.java
│ │ ├── HotArticleVo.java
│ │ ├── LinkVo.java
│ │ ├── MenuTreeVo.java
│ │ ├── MenuVo.java
│ │ ├── PageVo.java
│ │ ├── RoleMenuTreeSelectVo.java
│ │ ├── RoutersVo.java
│ │ ├── TagVo.java
│ │ ├── UserInfoAndRoleIdsVo.java
│ │ ├── UserInfoVo.java
│ │ └── UserVo.java
│ ├── enums
│ └── AppHttpCodeEnum.java
│ ├── exception
│ └── SystemException.java
│ ├── handler
│ ├── exception
│ │ └── GlobalExceptionHandler.java
│ ├── mybatisplus
│ │ └── MyMetaObjectHandler.java
│ └── security
│ │ ├── AccessDeniedHandlerImpl.java
│ │ └── AuthenticationEntryPointImpl.java
│ ├── mapper
│ ├── ArticleMapper.java
│ ├── ArticleTagMapper.java
│ ├── CategoryMapper.java
│ ├── CommentMapper.java
│ ├── LinkMapper.java
│ ├── MenuMapper.java
│ ├── RoleMapper.java
│ ├── RoleMenuMapper.java
│ ├── TagMapper.java
│ ├── UserMapper.java
│ └── UserRoleMapper.java
│ ├── service
│ ├── ArticleService.java
│ ├── ArticleTagService.java
│ ├── BlogLoginService.java
│ ├── CategoryService.java
│ ├── CommentService.java
│ ├── LinkService.java
│ ├── LoginService.java
│ ├── MenuService.java
│ ├── RoleMenuService.java
│ ├── RoleService.java
│ ├── TagService.java
│ ├── UploadService.java
│ ├── UserRoleService.java
│ ├── UserService.java
│ └── impl
│ │ ├── ArticleServiceImpl.java
│ │ ├── ArticleTagServiceImpl.java
│ │ ├── BlogLoginServiceImpl.java
│ │ ├── CategoryServiceImpl.java
│ │ ├── CommentServiceImpl.java
│ │ ├── LinkServiceImpl.java
│ │ ├── MenuServiceImpl.java
│ │ ├── OssUploadService.java
│ │ ├── PermissionService.java
│ │ ├── RoleMenuServiceImpl.java
│ │ ├── RoleServiceImpl.java
│ │ ├── SystemLoginServiceImpl.java
│ │ ├── TagServiceImpl.java
│ │ ├── UserDetailsServiceImpl.java
│ │ ├── UserRoleServiceImpl.java
│ │ └── UserServiceImpl.java
│ └── utils
│ ├── BeanCopyUtils.java
│ ├── JwtUtil.java
│ ├── PathUtils.java
│ ├── RedisCache.java
│ ├── SecurityUtils.java
│ ├── SystemConverter.java
│ └── WebUtils.java
└── resources
└── mapper
├── MenuMapper.xml
└── RoleMapper.xml
/.gitignore:
--------------------------------------------------------------------------------
1 | ######################################################################
2 | # Build Tools
3 |
4 | .gradle
5 | /build/
6 | !gradle/wrapper/gradle-wrapper.jar
7 |
8 | target/
9 | !.mvn/wrapper/maven-wrapper.jar
10 |
11 | ######################################################################
12 | # IDE
13 |
14 | ### STS ###
15 | .apt_generated
16 | .classpath
17 | .factorypath
18 | .project
19 | .settings
20 | .springBeans
21 |
22 | ### IntelliJ IDEA ###
23 | .idea
24 | *.iws
25 | *.iml
26 | *.ipr
27 |
28 | ### NetBeans ###
29 | nbproject/private/
30 | build/*
31 | nbbuild/
32 | dist/
33 | nbdist/
34 | .nb-gradle/
35 |
36 | ######################################################################
37 | # Others
38 | *.log
39 | *.xml.versionsBackup
40 | *.swp
41 |
42 | !*/build/*.java
43 | !*/build/*.html
44 | !*/build/*.xml
45 |
46 | ### Mac
47 | .DS_Store
48 | */.DS_Store
49 |
50 | ### VS Code ###
51 | *.project
52 | *.factorypath
53 |
54 | ### Compiled class file
55 | *.class
56 |
57 | ### Log file
58 | *.log
59 |
60 | ### BlueJ files
61 | *.ctxt
62 |
63 | ### Mobile Tools for Java (J2ME)
64 | .mtj.tmp/
65 |
66 | ### Package Files
67 | *.war
68 | *.nar
69 | *.ear
70 | *.zip
71 | *.tar.gz
72 | *.rar
73 |
74 | ### VSCode
75 | .vscode
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # SGBlog
2 | SpringBoot博客系统-包含前台后台-适合作为Java学习的第一练手项目
3 | 视频从零到1手把手教你如何写一个完整的项目,相关课程资料全部免费获取。
4 |
5 | 项目介绍: https://www.bilibili.com/video/BV1hq4y1F7zk
6 | 视频讲解:https://www.bilibili.com/video/BV1hq4y1F7zk
7 |
8 | 前端代码:https://github.com/sangengcaotang/SGBlog-front-end
9 |
10 | 如果能帮助到学习路上的你,请给个Star!
11 |
12 |
13 |
14 | 后端工程请使用JDK8!!!!
15 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | com.sangeng
8 | SGBlog
9 | pom
10 | 1.0-SNAPSHOT
11 |
12 | sangeng-framework
13 | sangeng-admin
14 | sangeng-blog
15 |
16 |
17 |
18 | UTF-8
19 | 1.8
20 |
21 |
22 |
23 |
24 |
25 |
26 | org.springframework.boot
27 | spring-boot-dependencies
28 | 2.5.0
29 | pom
30 | import
31 |
32 |
33 |
34 | com.alibaba
35 | fastjson
36 | 1.2.33
37 |
38 |
39 |
40 | io.jsonwebtoken
41 | jjwt
42 | 0.9.0
43 |
44 |
45 |
46 | com.baomidou
47 | mybatis-plus-boot-starter
48 | 3.4.3
49 |
50 |
51 |
52 |
53 | com.aliyun.oss
54 | aliyun-sdk-oss
55 | 3.10.2
56 |
57 |
58 |
59 |
60 | com.alibaba
61 | easyexcel
62 | 3.0.5
63 |
64 |
65 |
66 | io.springfox
67 | springfox-swagger2
68 | 2.9.2
69 |
70 |
71 | io.springfox
72 | springfox-swagger-ui
73 | 2.9.2
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | org.apache.maven.plugins
82 | maven-compiler-plugin
83 | 3.1
84 |
85 | ${java.version}
86 | ${java.version}
87 | ${project.build.sourceEncoding}
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/sangeng-admin/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | SGBlog
7 | com.sangeng
8 | 1.0-SNAPSHOT
9 |
10 | 4.0.0
11 |
12 | sangeng-admin
13 |
14 |
15 |
16 |
17 | com.sangeng
18 | sangeng-framework
19 | 1.0-SNAPSHOT
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/sangeng-admin/src/main/java/com/sangeng/BlogAdminApplication.java:
--------------------------------------------------------------------------------
1 | package com.sangeng;
2 |
3 | import org.mybatis.spring.annotation.MapperScan;
4 | import org.springframework.boot.SpringApplication;
5 | import org.springframework.boot.autoconfigure.SpringBootApplication;
6 |
7 | /**
8 | * @Author 三更 B站: https://space.bilibili.com/663528522
9 | */
10 | @SpringBootApplication
11 | @MapperScan("com.sangeng.mapper")
12 | public class BlogAdminApplication {
13 | public static void main(String[] args) {
14 | SpringApplication.run(BlogAdminApplication.class, args);
15 | }
16 | }
--------------------------------------------------------------------------------
/sangeng-admin/src/main/java/com/sangeng/config/SecurityConfig.java:
--------------------------------------------------------------------------------
1 | package com.sangeng.config;
2 |
3 | import com.sangeng.filter.JwtAuthenticationTokenFilter;
4 | import org.springframework.beans.factory.annotation.Autowired;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 | import org.springframework.security.authentication.AuthenticationManager;
8 | import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
9 | import org.springframework.security.config.annotation.web.builders.HttpSecurity;
10 | import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
11 | import org.springframework.security.config.http.SessionCreationPolicy;
12 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
13 | import org.springframework.security.crypto.password.PasswordEncoder;
14 | import org.springframework.security.web.AuthenticationEntryPoint;
15 | import org.springframework.security.web.access.AccessDeniedHandler;
16 | import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
17 |
18 | @Configuration
19 | @EnableGlobalMethodSecurity(prePostEnabled = true)
20 | public class SecurityConfig extends WebSecurityConfigurerAdapter {
21 |
22 | @Override
23 | @Bean
24 | public AuthenticationManager authenticationManagerBean() throws Exception {
25 | return super.authenticationManagerBean();
26 | }
27 |
28 | @Autowired
29 | private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
30 | @Autowired
31 | AuthenticationEntryPoint authenticationEntryPoint;
32 | @Autowired
33 | AccessDeniedHandler accessDeniedHandler;
34 |
35 |
36 | @Override
37 | protected void configure(HttpSecurity http) throws Exception {
38 | http
39 | //关闭csrf
40 | .csrf().disable()
41 | //不通过Session获取SecurityContext
42 | .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
43 | .and()
44 | .authorizeRequests()
45 | // 对于登录接口 允许匿名访问
46 | .antMatchers("/user/login").anonymous()
47 | // //注销接口需要认证才能访问
48 | // .antMatchers("/logout").authenticated()
49 | // .antMatchers("/user/userInfo").authenticated()
50 | // .antMatchers("/upload").authenticated()
51 | // 除上面外的所有请求全部不需要认证即可访问
52 | .anyRequest().authenticated();
53 |
54 | //配置异常处理器
55 | http.exceptionHandling()
56 | .authenticationEntryPoint(authenticationEntryPoint)
57 | .accessDeniedHandler(accessDeniedHandler);
58 | //关闭默认的注销功能
59 | http.logout().disable();
60 | //把jwtAuthenticationTokenFilter添加到SpringSecurity的过滤器链中
61 | http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
62 | //允许跨域
63 | http.cors();
64 | }
65 |
66 | @Bean
67 | public PasswordEncoder passwordEncoder(){
68 | return new BCryptPasswordEncoder();
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/sangeng-admin/src/main/java/com/sangeng/controller/ArticleController.java:
--------------------------------------------------------------------------------
1 | package com.sangeng.controller;
2 |
3 | import com.sangeng.domain.ResponseResult;
4 | import com.sangeng.domain.dto.AddArticleDto;
5 | import com.sangeng.domain.dto.ArticleDto;
6 | import com.sangeng.domain.entity.Article;
7 | import com.sangeng.domain.vo.ArticleVo;
8 | import com.sangeng.domain.vo.PageVo;
9 | import com.sangeng.service.ArticleService;
10 | import com.sangeng.service.CategoryService;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.web.bind.annotation.*;
13 |
14 | /**
15 | * @Author 三更 B站: https://space.bilibili.com/663528522
16 | */
17 | @RestController
18 | @RequestMapping("/content/article")
19 | public class ArticleController {
20 |
21 | @Autowired
22 | private ArticleService articleService;
23 |
24 | @PostMapping
25 | public ResponseResult add(@RequestBody AddArticleDto article){
26 | return articleService.add(article);
27 | }
28 |
29 |
30 | @GetMapping("/list")
31 | public ResponseResult list(Article article, Integer pageNum, Integer pageSize)
32 | {
33 | PageVo pageVo = articleService.selectArticlePage(article,pageNum,pageSize);
34 | return ResponseResult.okResult(pageVo);
35 | }
36 |
37 | @GetMapping(value = "/{id}")
38 | public ResponseResult getInfo(@PathVariable(value = "id")Long id){
39 | ArticleVo article = articleService.getInfo(id);
40 | return ResponseResult.okResult(article);
41 | }
42 |
43 | @PutMapping
44 | public ResponseResult edit(@RequestBody ArticleDto article){
45 | articleService.edit(article);
46 | return ResponseResult.okResult();
47 | }
48 | @DeleteMapping("/{id}")
49 | public ResponseResult delete(@PathVariable Long id){
50 | articleService.removeById(id);
51 | return ResponseResult.okResult();
52 | }
53 | }
--------------------------------------------------------------------------------
/sangeng-admin/src/main/java/com/sangeng/controller/CategoryController.java:
--------------------------------------------------------------------------------
1 | package com.sangeng.controller;
2 |
3 | import com.alibaba.excel.EasyExcel;
4 | import com.alibaba.fastjson.JSON;
5 | import com.sangeng.domain.ResponseResult;
6 | import com.sangeng.domain.entity.Category;
7 | import com.sangeng.domain.vo.CategoryVo;
8 | import com.sangeng.domain.vo.ExcelCategoryVo;
9 | import com.sangeng.domain.vo.PageVo;
10 | import com.sangeng.enums.AppHttpCodeEnum;
11 | import com.sangeng.service.CategoryService;
12 | import com.sangeng.utils.BeanCopyUtils;
13 | import com.sangeng.utils.WebUtils;
14 | import org.springframework.beans.factory.annotation.Autowired;
15 | import org.springframework.security.access.prepost.PreAuthorize;
16 | import org.springframework.web.bind.annotation.*;
17 |
18 | import javax.servlet.http.HttpServletRequest;
19 | import javax.servlet.http.HttpServletResponse;
20 | import java.io.IOException;
21 | import java.io.UnsupportedEncodingException;
22 | import java.util.List;
23 |
24 | /**
25 | * @Author 三更 B站: https://space.bilibili.com/663528522
26 | */
27 | @RestController
28 | @RequestMapping("/content/category")
29 | public class CategoryController {
30 | @Autowired
31 | private CategoryService categoryService;
32 |
33 | @GetMapping("/listAllCategory")
34 | public ResponseResult listAllCategory(){
35 | List list = categoryService.listAllCategory();
36 | return ResponseResult.okResult(list);
37 | }
38 | @PutMapping
39 | public ResponseResult edit(@RequestBody Category category){
40 | categoryService.updateById(category);
41 | return ResponseResult.okResult();
42 | }
43 |
44 | @DeleteMapping(value = "/{id}")
45 | public ResponseResult remove(@PathVariable(value = "id")Long id){
46 | categoryService.removeById(id);
47 | return ResponseResult.okResult();
48 | }
49 |
50 | @GetMapping(value = "/{id}")
51 | public ResponseResult getInfo(@PathVariable(value = "id")Long id){
52 | Category category = categoryService.getById(id);
53 | return ResponseResult.okResult(category);
54 | }
55 | @PostMapping
56 | public ResponseResult add(@RequestBody Category category){
57 | categoryService.save(category);
58 | return ResponseResult.okResult();
59 | }
60 | /**
61 | * 获取用户列表
62 | */
63 | @GetMapping("/list")
64 | public ResponseResult list(Category category, Integer pageNum, Integer pageSize) {
65 | PageVo pageVo = categoryService.selectCategoryPage(category,pageNum,pageSize);
66 | return ResponseResult.okResult(pageVo);
67 | }
68 |
69 |
70 | @PreAuthorize("@ps.hasPermission('content:category:export')")
71 | @GetMapping("/export")
72 | public void export(HttpServletResponse response){
73 | try {
74 | //设置下载文件的请求头
75 | WebUtils.setDownLoadHeader("分类.xlsx",response);
76 | //获取需要导出的数据
77 | List categoryVos = categoryService.list();
78 |
79 | List excelCategoryVos = BeanCopyUtils.copyBeanList(categoryVos, ExcelCategoryVo.class);
80 | //把数据写入到Excel中
81 | EasyExcel.write(response.getOutputStream(), ExcelCategoryVo.class).autoCloseStream(Boolean.FALSE).sheet("分类导出")
82 | .doWrite(excelCategoryVos);
83 |
84 | } catch (Exception e) {
85 | //如果出现异常也要响应json
86 | ResponseResult result = ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR);
87 | WebUtils.renderString(response, JSON.toJSONString(result));
88 | }
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/sangeng-admin/src/main/java/com/sangeng/controller/LinkController.java:
--------------------------------------------------------------------------------
1 | package com.sangeng.controller;
2 |
3 | import com.sangeng.domain.ResponseResult;
4 | import com.sangeng.domain.entity.Link;
5 | import com.sangeng.domain.vo.PageVo;
6 | import com.sangeng.service.LinkService;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.security.access.prepost.PreAuthorize;
9 | import org.springframework.web.bind.annotation.*;
10 |
11 | /**
12 | * @Author 三更 B站: https://space.bilibili.com/663528522
13 | */
14 | @RestController
15 | @RequestMapping("/content/link")
16 | public class LinkController {
17 | @Autowired
18 | private LinkService linkService;
19 |
20 | /**
21 | * 获取友链列表
22 | */
23 | @GetMapping("/list")
24 | public ResponseResult list(Link link, Integer pageNum, Integer pageSize)
25 | {
26 | PageVo pageVo = linkService.selectLinkPage(link,pageNum,pageSize);
27 | return ResponseResult.okResult(pageVo);
28 | }
29 |
30 | @PostMapping
31 | public ResponseResult add(@RequestBody Link link){
32 | linkService.save(link);
33 | return ResponseResult.okResult();
34 | }
35 |
36 | @DeleteMapping("/{id}")
37 | public ResponseResult delete(@PathVariable Long id){
38 | linkService.removeById(id);
39 | return ResponseResult.okResult();
40 | }
41 |
42 | @PutMapping
43 | public ResponseResult edit(@RequestBody Link link){
44 | linkService.updateById(link);
45 | return ResponseResult.okResult();
46 | }
47 |
48 | @PutMapping("/changeLinkStatus")
49 | public ResponseResult changeLinkStatus(@RequestBody Link link){
50 | linkService.updateById(link);
51 | return ResponseResult.okResult();
52 | }
53 |
54 |
55 |
56 | @GetMapping(value = "/{id}")
57 | public ResponseResult getInfo(@PathVariable(value = "id")Long id){
58 | Link link = linkService.getById(id);
59 | return ResponseResult.okResult(link);
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/sangeng-admin/src/main/java/com/sangeng/controller/LoginController.java:
--------------------------------------------------------------------------------
1 | package com.sangeng.controller;
2 |
3 | import com.sangeng.domain.ResponseResult;
4 | import com.sangeng.domain.entity.LoginUser;
5 | import com.sangeng.domain.entity.Menu;
6 | import com.sangeng.domain.entity.User;
7 | import com.sangeng.domain.vo.AdminUserInfoVo;
8 | import com.sangeng.domain.vo.RoutersVo;
9 | import com.sangeng.domain.vo.UserInfoVo;
10 | import com.sangeng.enums.AppHttpCodeEnum;
11 | import com.sangeng.exception.SystemException;
12 | import com.sangeng.service.BlogLoginService;
13 | import com.sangeng.service.LoginService;
14 | import com.sangeng.service.MenuService;
15 | import com.sangeng.service.RoleService;
16 | import com.sangeng.utils.BeanCopyUtils;
17 | import com.sangeng.utils.RedisCache;
18 | import com.sangeng.utils.SecurityUtils;
19 | import org.springframework.beans.factory.annotation.Autowired;
20 | import org.springframework.util.StringUtils;
21 | import org.springframework.web.bind.annotation.*;
22 |
23 | import java.util.List;
24 |
25 | @RestController
26 | public class LoginController {
27 | @Autowired
28 | private LoginService loginService;
29 |
30 | @Autowired
31 | private MenuService menuService;
32 |
33 | @Autowired
34 | private RoleService roleService;
35 |
36 |
37 | @PostMapping("/user/login")
38 | public ResponseResult login(@RequestBody User user){
39 | if(!StringUtils.hasText(user.getUserName())){
40 | //提示 必须要传用户名
41 | throw new SystemException(AppHttpCodeEnum.REQUIRE_USERNAME);
42 | }
43 | return loginService.login(user);
44 | }
45 |
46 | @PostMapping("/user/logout")
47 | public ResponseResult logout(){
48 | return loginService.logout();
49 | }
50 |
51 |
52 |
53 | @GetMapping("getInfo")
54 | public ResponseResult getInfo(){
55 | //获取当前登录的用户
56 | LoginUser loginUser = SecurityUtils.getLoginUser();
57 | //根据用户id查询权限信息
58 | List perms = menuService.selectPermsByUserId(loginUser.getUser().getId());
59 | //根据用户id查询角色信息
60 | List roleKeyList = roleService.selectRoleKeyByUserId(loginUser.getUser().getId());
61 |
62 | //获取用户信息
63 | User user = loginUser.getUser();
64 | UserInfoVo userInfoVo = BeanCopyUtils.copyBean(user, UserInfoVo.class);
65 | //封装数据返回
66 |
67 | AdminUserInfoVo adminUserInfoVo = new AdminUserInfoVo(perms,roleKeyList,userInfoVo);
68 | return ResponseResult.okResult(adminUserInfoVo);
69 | }
70 |
71 |
72 | @GetMapping("getRouters")
73 | public ResponseResult getRouters(){
74 | Long userId = SecurityUtils.getUserId();
75 | //查询menu 结果是tree的形式
76 | List