基于javaweb+mysql的springboot朴素风个人博客系统(前后端分离+java+vue+springboot+ssm+mysql+maven+redis)
运行环境
Java≥8、MySQL≥5.7、Node.js≥10
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot朴素风个人博客系统(前后端分离+java+vue+springboot+ssm+mysql+maven+redis)
一、项目简述
本系统功能包括: 基于vue + Springboo痼J后端分离项目个人博客系统,注册 登录,首页展示,喜爰图书展示,后台图书维护,个人文 章展示,后台文章上传等等。
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX (Webstorm也 行)+ Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts都支 持)。
项目技术: Springboot + Maven + Mybatis + Vue + Redis^K, B/S 模式+ Maven等等。
}
}
}
/**
* Login and register controller.
*
*/
@RestController
public class LoginController {
@Autowired
UserService userService;
@PostMapping("/api/login")
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
Subject subject = SecurityUtils.getSubject();
// subject.getSession().setTimeout(10000);
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, requestUser.getPassword());
usernamePasswordToken.setRememberMe(true);
try {
subject.login(usernamePasswordToken);
User user = userService.findByUsername(username);
if (!user.isEnabled()) {
return ResultFactory.buildFailResult("该用户已被禁用");
}
return ResultFactory.buildSuccessResult(username);
} catch (IncorrectCredentialsException e) {
return ResultFactory.buildFailResult("密码错误");
} catch (UnknownAccountException e) {
}
@GetMapping("/api/categories/{cid}/books")
public Result listByCategory(@PathVariable("cid") int cid) {
if (0 != cid) {
return ResultFactory.buildSuccessResult(bookService.listByCategory(cid));
} else {
return ResultFactory.buildSuccessResult(bookService.list());
}
}
@PostMapping("/api/admin/content/books/covers")
public String coversUpload(MultipartFile file) {
String folder = "D:/workspace/img";
File imageFolder = new File(folder);
File f = new File(imageFolder, StringUtils.getRandomString(6) + file.getOriginalFilename()
.substring(file.getOriginalFilename().length() - 4));
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
try {
file.transferTo(f);
String imgURL = "http://localhost:8443/api/file/" + f.getName();
return imgURL;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
boolean hasPermission = false;
String username = subject.getPrincipal().toString();
Set<String> permissionAPIs = adminPermissionService.listPermissionURLsByUser(username);
for (String api : permissionAPIs) {
// 匹配前缀
if (requestAPI.startsWith(api)) {
hasPermission = true;
break;
}
}
if (hasPermission) {
log.trace("用户:" + username + "访问了:" + requestAPI + "接口");
return true;
} else {
log.warn( "用户:" + username + "访问了没有权限的接口:" + requestAPI);
return false;
}
}
}
}
/**
* Login and register controller.
*
*/
@RestController
public class LoginController {
@Autowired
public String coversUpload(MultipartFile file) {
String folder = "D:/workspace/img";
File imageFolder = new File(folder);
File f = new File(imageFolder, StringUtils.getRandomString(6) + file.getOriginalFilename()
.substring(file.getOriginalFilename().length() - 4));
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
try {
file.transferTo(f);
String imgURL = "http://localhost:8443/api/file/" + f.getName();
return imgURL;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
/**
* Role controller.
*
*/
@RestController
public class RoleController {
@Autowired
AdminRoleService adminRoleService;
@Autowired
AdminPermissionService adminPermissionService;
/**
* Login and register controller.
*
*/
@RestController
public class LoginController {
@Autowired
UserService userService;
@PostMapping("/api/login")
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
Subject subject = SecurityUtils.getSubject();
// subject.getSession().setTimeout(10000);
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, requestUser.getPassword());
usernamePasswordToken.setRememberMe(true);
try {
subject.login(usernamePasswordToken);
User user = userService.findByUsername(username);
if (!user.isEnabled()) {
return ResultFactory.buildFailResult("该用户已被禁用");
}
return ResultFactory.buildSuccessResult(username);
} catch (IncorrectCredentialsException e) {
return ResultFactory.buildFailResult("密码错误");
} catch (UnknownAccountException e) {
return ResultFactory.buildFailResult("账号不存在");
}
}
@PostMapping("/api/login")
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
Subject subject = SecurityUtils.getSubject();
// subject.getSession().setTimeout(10000);
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, requestUser.getPassword());
usernamePasswordToken.setRememberMe(true);
try {
subject.login(usernamePasswordToken);
User user = userService.findByUsername(username);
if (!user.isEnabled()) {
return ResultFactory.buildFailResult("该用户已被禁用");
}
return ResultFactory.buildSuccessResult(username);
} catch (IncorrectCredentialsException e) {
return ResultFactory.buildFailResult("密码错误");
} catch (UnknownAccountException e) {
return ResultFactory.buildFailResult("账号不存在");
}
}
@PostMapping("/api/register")
public Result register(@RequestBody User user) {
int status = userService.register(user);
switch (status) {
case 0:
return ResultFactory.buildFailResult("用户名和密码不能为空");
case 1:
return ResultFactory.buildSuccessResult("注册成功");
case 2:
return ResultFactory.buildFailResult("用户已存在");
}
return ResultFactory.buildFailResult("未知错误");
}
@GetMapping("/api/logout")
public Result logout() {
Subject subject = SecurityUtils.getSubject();
subject.logout();
return ResultFactory.buildSuccessResult("成功登出");
}
@GetMapping("/api/authentication")
public String authentication() {
return "身份认证成功";
}
userService.editUser(requestUser);
return ResultFactory.buildSuccessResult("修改用户信息成功");
}
}
/**
* Global exception handler.
*
*/
@ControllerAdvice
@ResponseBody
public class DefaultExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result exceptionHandler(Exception e) {
String message = null;
if (e instanceof IllegalArgumentException) {
message = "传入了错误的参数";
}
if (e instanceof MethodArgumentNotValidException) {
message = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError().getDefaultMessage();
}
if (e instanceof UnauthorizedException) {
message = "权限认证失败";
}
return ResultFactory.buildFailResult(message);
}
}
@GetMapping("/api/article/{id}")
public Result getOneArticle(@PathVariable("id") int id) {
return ResultFactory.buildSuccessResult(jotterArticleService.findById(id));
}
@DeleteMapping("/api/admin/content/article/{id}")
public Result deleteArticle(@PathVariable("id") int id) {
jotterArticleService.delete(id);
return ResultFactory.buildSuccessResult("删除成功");
}
}
/**
* User controller.
*
*/
@RestController
public class UserController {
@Autowired
UserService userService;
@Autowired
AdminUserRoleService adminUserRoleService;
@GetMapping("/api/admin/user")
public Result listUsers() {
return ResultFactory.buildSuccessResult(userService.list());
}
@PutMapping("/api/admin/user/status")
public Result updateUserStatus(@RequestBody @Valid User requestUser) {
userService.updateUserStatus(requestUser);
/**
* Login and register controller.
*
*/
@RestController
public class LoginController {
@Autowired
UserService userService;
@PostMapping("/api/login")
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
Subject subject = SecurityUtils.getSubject();
// subject.getSession().setTimeout(10000);
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, requestUser.getPassword());
usernamePasswordToken.setRememberMe(true);
try {
subject.login(usernamePasswordToken);
User user = userService.findByUsername(username);
if (!user.isEnabled()) {
return ResultFactory.buildFailResult("该用户已被禁用");
}
return ResultFactory.buildSuccessResult(username);
} catch (IncorrectCredentialsException e) {
return ResultFactory.buildFailResult("密码错误");
} catch (UnknownAccountException e) {
return ResultFactory.buildSuccessResult("修改用户成功");
}
@GetMapping("/api/admin/role/perm")
public Result listPerms() {
return ResultFactory.buildSuccessResult(adminPermissionService.list());
}
@PutMapping("/api/admin/role/menu")
public Result updateRoleMenu(@RequestParam int rid, @RequestBody Map<String, List<Integer>> menusIds) {
adminRoleMenuService.updateRoleMenu(rid, menusIds);
return ResultFactory.buildSuccessResult("更新成功");
}
}
/**
* Jotter controller.
*
*/
@RestController
public class JotterController {
@Autowired
JotterArticleService jotterArticleService;
@PostMapping("api/admin/content/article")
public Result saveArticle(@RequestBody @Valid JotterArticle article) {
jotterArticleService.addOrUpdate(article);
return ResultFactory.buildSuccessResult("保存成功");
}
* Jotter controller.
*
*/
@RestController
public class JotterController {
@Autowired
JotterArticleService jotterArticleService;
@PostMapping("api/admin/content/article")
public Result saveArticle(@RequestBody @Valid JotterArticle article) {
jotterArticleService.addOrUpdate(article);
return ResultFactory.buildSuccessResult("保存成功");
}
@GetMapping("/api/article/{size}/{page}")
public Result listArticles(@PathVariable("size") int size, @PathVariable("page") int page) {
return ResultFactory.buildSuccessResult(jotterArticleService.list(page - 1, size));
}
@GetMapping("/api/article/{id}")
public Result getOneArticle(@PathVariable("id") int id) {
return ResultFactory.buildSuccessResult(jotterArticleService.findById(id));
}
@DeleteMapping("/api/admin/content/article/{id}")
public Result deleteArticle(@PathVariable("id") int id) {
jotterArticleService.delete(id);
return ResultFactory.buildSuccessResult("删除成功");
}
}
/**
* User controller.
*
AdminRoleMenuService adminRoleMenuService;
@GetMapping("/api/admin/role")
public Result listRoles() {
return ResultFactory.buildSuccessResult(adminRoleService.listWithPermsAndMenus());
}
@PutMapping("/api/admin/role/status")
public Result updateRoleStatus(@RequestBody AdminRole requestRole) {
AdminRole adminRole = adminRoleService.updateRoleStatus(requestRole);
String message = "用户" + adminRole.getNameZh() + "状态更新成功";
return ResultFactory.buildSuccessResult(message);
}
@PutMapping("/api/admin/role")
public Result editRole(@RequestBody AdminRole requestRole) {
adminRoleService.addOrUpdate(requestRole);
adminRolePermissionService.savePermChanges(requestRole.getId(), requestRole.getPerms());
String message = "修改角色信息成功";
return ResultFactory.buildSuccessResult(message);
}
@PostMapping("/api/admin/role")
public Result addRole(@RequestBody AdminRole requestRole) {
adminRoleService.editRole(requestRole);
return ResultFactory.buildSuccessResult("修改用户成功");
}
@GetMapping("/api/admin/role/perm")
public Result listPerms() {
return ResultFactory.buildSuccessResult(adminPermissionService.list());
}
@PutMapping("/api/admin/role/menu")
public Result updateRoleMenu(@RequestParam int rid, @RequestBody Map<String, List<Integer>> menusIds) {
adminRoleMenuService.updateRoleMenu(rid, menusIds);
return ResultFactory.buildSuccessResult("更新成功");
}
}
@Autowired
AdminUserRoleService adminUserRoleService;
@GetMapping("/api/admin/user")
public Result listUsers() {
return ResultFactory.buildSuccessResult(userService.list());
}
@PutMapping("/api/admin/user/status")
public Result updateUserStatus(@RequestBody @Valid User requestUser) {
userService.updateUserStatus(requestUser);
return ResultFactory.buildSuccessResult("用户状态更新成功");
}
@PutMapping("/api/admin/user/password")
public Result resetPassword(@RequestBody @Valid User requestUser) {
userService.resetPassword(requestUser);
return ResultFactory.buildSuccessResult("重置密码成功");
}
@PutMapping("/api/admin/user")
public Result editUser(@RequestBody @Valid User requestUser) {
userService.editUser(requestUser);
return ResultFactory.buildSuccessResult("修改用户信息成功");
}
}
/**
* Global exception handler.
*
*/
@ControllerAdvice
@ResponseBody
public class DefaultExceptionHandler {
@ExceptionHandler(value = Exception.class)
public Result exceptionHandler(Exception e) {
String message = null;
if (e instanceof IllegalArgumentException) {
message = "传入了错误的参数";
/**
* Role controller.
*
*/
@RestController
public class RoleController {
@Autowired
AdminRoleService adminRoleService;
@Autowired
AdminPermissionService adminPermissionService;
@Autowired
AdminRolePermissionService adminRolePermissionService;
@Autowired
AdminRoleMenuService adminRoleMenuService;
@GetMapping("/api/admin/role")
public Result listRoles() {
return ResultFactory.buildSuccessResult(adminRoleService.listWithPermsAndMenus());
}
@PutMapping("/api/admin/role/status")
public Result updateRoleStatus(@RequestBody AdminRole requestRole) {
AdminRole adminRole = adminRoleService.updateRoleStatus(requestRole);
String message = "用户" + adminRole.getNameZh() + "状态更新成功";
return ResultFactory.buildSuccessResult(message);
}
@PutMapping("/api/admin/role")
public Result editRole(@RequestBody AdminRole requestRole) {
adminRoleService.addOrUpdate(requestRole);
adminRolePermissionService.savePermChanges(requestRole.getId(), requestRole.getPerms());
String message = "修改角色信息成功";
return ResultFactory.buildSuccessResult(message);
}
@PostMapping("/api/admin/role")
public Result addRole(@RequestBody AdminRole requestRole) {
adminRoleService.editRole(requestRole);
return ResultFactory.buildSuccessResult("修改用户成功");
return false;
}
// 判断访问接口是否需要过滤(数据库中是否有对应信息)
boolean needFilter = adminPermissionService.needFilter(requestAPI);
if (!needFilter) {
return true;
} else {
// 判断当前用户是否有相应权限
boolean hasPermission = false;
String username = subject.getPrincipal().toString();
Set<String> permissionAPIs = adminPermissionService.listPermissionURLsByUser(username);
for (String api : permissionAPIs) {
// 匹配前缀
if (requestAPI.startsWith(api)) {
hasPermission = true;
break;
}
}
if (hasPermission) {
log.trace("用户:" + username + "访问了:" + requestAPI + "接口");
return true;
} else {
log.warn( "用户:" + username + "访问了没有权限的接口:" + requestAPI);
return false;
}
}
}
}
/**
* Login and register controller.
*
@GetMapping("/api/logout")
public Result logout() {
Subject subject = SecurityUtils.getSubject();
subject.logout();
return ResultFactory.buildSuccessResult("成功登出");
}
@GetMapping("/api/authentication")
public String authentication() {
return "身份认证成功";
}
}
/**
* Library controller.
*
*/
@RestController
public class LibraryController {
@Autowired
BookService bookService;
@GetMapping("/api/books")
public Result listBooks() {
return ResultFactory.buildSuccessResult(bookService.list());
}
@PostMapping("/api/admin/content/books")
if (0 != cid) {
return ResultFactory.buildSuccessResult(bookService.listByCategory(cid));
} else {
return ResultFactory.buildSuccessResult(bookService.list());
}
}
@PostMapping("/api/admin/content/books/covers")
public String coversUpload(MultipartFile file) {
String folder = "D:/workspace/img";
File imageFolder = new File(folder);
File f = new File(imageFolder, StringUtils.getRandomString(6) + file.getOriginalFilename()
.substring(file.getOriginalFilename().length() - 4));
if (!f.getParentFile().exists())
f.getParentFile().mkdirs();
try {
file.transferTo(f);
String imgURL = "http://localhost:8443/api/file/" + f.getName();
return imgURL;
} catch (IOException e) {
e.printStackTrace();
return "";
}
}
}
@PostMapping("/api/login")
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
Subject subject = SecurityUtils.getSubject();
// subject.getSession().setTimeout(10000);
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, requestUser.getPassword());
usernamePasswordToken.setRememberMe(true);
try {
subject.login(usernamePasswordToken);
User user = userService.findByUsername(username);
if (!user.isEnabled()) {
return ResultFactory.buildFailResult("该用户已被禁用");
}
return ResultFactory.buildSuccessResult(username);
} catch (IncorrectCredentialsException e) {
return ResultFactory.buildFailResult("密码错误");
} catch (UnknownAccountException e) {
return ResultFactory.buildFailResult("账号不存在");
}
}
@PostMapping("/api/register")
public Result register(@RequestBody User user) {
int status = userService.register(user);
switch (status) {
case 0:
return ResultFactory.buildFailResult("用户名和密码不能为空");
case 1:
return ResultFactory.buildSuccessResult("注册成功");
case 2:
return ResultFactory.buildFailResult("用户已存在");
}
return ResultFactory.buildFailResult("未知错误");
}
@GetMapping("/api/logout")
public Result logout() {
Subject subject = SecurityUtils.getSubject();
subject.logout();
return ResultFactory.buildSuccessResult("成功登出");