基于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等等。
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);
}
}
/**
* Menu controller.
*
}
}
@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 "";
}
}
}
/**
* Role controller.
*
*/
@RestController
public class RoleController {
@Autowired
AdminRoleService adminRoleService;
@Autowired
AdminPermissionService adminPermissionService;
@Autowired
AdminRolePermissionService adminRolePermissionService;
@Autowired
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)
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;
@Autowired
AdminRolePermissionService adminRolePermissionService;
@Autowired
AdminRoleMenuService adminRoleMenuService;
@GetMapping("/api/admin/role")
public Result listRoles() {
return ResultFactory.buildSuccessResult(adminRoleService.listWithPermsAndMenus());
}
/**
* 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/register")
/**
* 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")
public Result addOrUpdateBooks(@RequestBody @Valid Book book) {
bookService.addOrUpdate(book);
return ResultFactory.buildSuccessResult("修改成功");
}
@PostMapping("/api/admin/content/books/delete")
public Result deleteBook(@RequestBody @Valid Book book) {
bookService.deleteById(book.getId());
return ResultFactory.buildSuccessResult("删除成功");
}
@GetMapping("/api/search")
public Result searchResult(@RequestParam("keywords") String keywords) {
if ("".equals(keywords)) {
return ResultFactory.buildSuccessResult(bookService.list());
} else {
return ResultFactory.buildSuccessResult(bookService.Search(keywords));
}
}
@GetMapping("/api/categories/{cid}/books")
public Result listByCategory(@PathVariable("cid") int cid) {
if (0 != cid) {
@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 = "传入了错误的参数";
}
if (e instanceof MethodArgumentNotValidException) {
message = ((MethodArgumentNotValidException) e).getBindingResult().getFieldError().getDefaultMessage();
}
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);
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("修改用户成功");
/**
*/
@Log4j2
public class URLPathMatchingFilter extends PathMatchingFilter {
@Autowired
AdminPermissionService adminPermissionService;
@Override
protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
if (HttpMethod.OPTIONS.toString().equals((httpServletRequest).getMethod())) {
httpServletResponse.setStatus(HttpStatus.NO_CONTENT.value());
return true;
}
if (null == adminPermissionService) {
adminPermissionService = SpringContextUtils.getContext().getBean(AdminPermissionService.class);
}
String requestAPI = getPathWithinApplication(request);
Subject subject = SecurityUtils.getSubject();
if (!subject.isAuthenticated()) {
log.info("未登录用户尝试访问需要登录的接口");
return false;
}
}
/**
* 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() + "状态更新成功";
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/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);
return ResultFactory.buildSuccessResult("用户状态更新成功");
AdminPermissionService adminPermissionService;
@Override
protected boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
if (HttpMethod.OPTIONS.toString().equals((httpServletRequest).getMethod())) {
httpServletResponse.setStatus(HttpStatus.NO_CONTENT.value());
return true;
}
if (null == adminPermissionService) {
adminPermissionService = SpringContextUtils.getContext().getBean(AdminPermissionService.class);
}
String requestAPI = getPathWithinApplication(request);
Subject subject = SecurityUtils.getSubject();
if (!subject.isAuthenticated()) {
log.info("未登录用户尝试访问需要登录的接口");
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;
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("更新成功");
}
}
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
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
UserService userService;
@PostMapping("/api/login")
public Result login(@RequestBody User requestUser) {
String username = requestUser.getUsername();
username = HtmlUtils.htmlEscape(username);
Subject subject = SecurityUtils.getSubject();