diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/config/AuthenticationFilter.java b/blog-backend/src/main/java/cn/hamster3/application/blog/config/AuthenticationFilter.java index 9d529ba..5b05f25 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/config/AuthenticationFilter.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/config/AuthenticationFilter.java @@ -28,7 +28,7 @@ public class AuthenticationFilter extends OncePerRequestFilter { filterChain.doFilter(request, response); return; } - Authentication authentication = (Authentication) session.getAttribute("authenticate"); + Authentication authentication = (Authentication) session.getAttribute("Authentication"); if (authentication == null) { filterChain.doFilter(request, response); return; diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/controller/AttachController.java b/blog-backend/src/main/java/cn/hamster3/application/blog/controller/AttachController.java index 2f709fa..854d41e 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/controller/AttachController.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/controller/AttachController.java @@ -8,7 +8,7 @@ import org.springframework.web.multipart.MultipartFile; @Tag(name = "AttachController", description = "附件相关接口") @RestController -@RequestMapping(value = "/api/v1/attach",produces = MediaType.APPLICATION_JSON_VALUE) +@RequestMapping(value = "/api/v1/attach", produces = MediaType.APPLICATION_JSON_VALUE) public class AttachController { @PostMapping("/") public ResponseVO createAttach(@RequestBody MultipartFile file) { diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/controller/UserController.java b/blog-backend/src/main/java/cn/hamster3/application/blog/controller/UserController.java index 519f285..1c753e5 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/controller/UserController.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/controller/UserController.java @@ -28,6 +28,12 @@ public class UserController { @Resource private IUserService userService; + @PostMapping("/") + @Operation(summary = "注册用户") + public ResponseVO registerUser(HttpServletRequest request, @RequestBody @Valid UserCreateRequireVO requireVO) { + return userService.registerUser(request, requireVO); + } + @PostMapping("/login") @Operation(summary = "登录用户") public ResponseVO loginUser(HttpServletRequest request, @RequestBody @Valid UserLoginRequireVO requireVO) { @@ -40,18 +46,11 @@ public class UserController { return userService.getCurrentUserInfo(); } - @PostMapping("/") - @Operation(summary = "注册用户") - public ResponseVO register(@RequestBody @Valid UserCreateRequireVO requireVO) { - return userService.createUser(requireVO); - } - @PutMapping("/{userID}/") @Operation(summary = "更新用户信息") public ResponseVO updateUser( @Parameter(description = "用户ID") @PathVariable UUID userID, - @Parameter(description = "用户信息") @RequestBody @Valid UserUpdateRequireVO requireVO - ) { + @Parameter(description = "用户信息") @RequestBody @Valid UserUpdateRequireVO requireVO) { return userService.updateUser(userID, requireVO); } @@ -59,8 +58,7 @@ public class UserController { @Operation(summary = "查询用户列表") public ResponseVO> getAllUserInfo( @Parameter(description = "页码", example = "0") int page, - @Parameter(description = "大小", example = "10") int size - ) { + @Parameter(description = "大小", example = "10") int size) { return userService.getAllUserInfo(PageRequest.of(page, Math.min(size, 100))); } @@ -75,8 +73,7 @@ public class UserController { public ResponseVO> getUserBlogList( @Parameter(description = "用户ID") @PathVariable UUID userID, @Parameter(description = "页码", example = "0") int page, - @Parameter(description = "大小", example = "10") int size - ) { + @Parameter(description = "大小", example = "10") int size) { return userService.getUserBlogList(userID, PageRequest.of(page, Math.min(size, 100))); } @@ -85,8 +82,7 @@ public class UserController { public ResponseVO> getUserAttachList( @Parameter(description = "用户ID") @PathVariable UUID userID, @Parameter(description = "页码", example = "0") int page, - @Parameter(description = "大小", example = "10") int size - ) { + @Parameter(description = "大小", example = "10") int size) { return userService.getUserAttachList(userID, PageRequest.of(page, Math.min(size, 100))); } } diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/entity/mapper/BlogMapper.java b/blog-backend/src/main/java/cn/hamster3/application/blog/entity/mapper/BlogMapper.java index aed9886..02e3ee1 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/entity/mapper/BlogMapper.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/entity/mapper/BlogMapper.java @@ -4,6 +4,7 @@ import cn.hamster3.application.blog.entity.BlogEntity; import cn.hamster3.application.blog.entity.UserEntity; import cn.hamster3.application.blog.vo.blog.BlogInfoResponseVO; import cn.hamster3.application.blog.vo.blog.BlogUpdateRequireVO; +import cn.hamster3.application.blog.vo.user.UserInfoResponseVO; import org.jetbrains.annotations.NotNull; import org.mapstruct.Mapper; import org.mapstruct.MappingConstants; @@ -19,7 +20,18 @@ public interface BlogMapper { @NotNull @SuppressWarnings("unused") - default UUID map(@NotNull UserEntity value) { + default UUID mapToUUID(@NotNull UserEntity value) { return value.getId(); } + + default UserInfoResponseVO mapToInfoVO(@NotNull UserEntity value) { + return new UserInfoResponseVO( + value.getId(), + value.getEmail(), + value.getNickname(), + value.getRole(), + value.getCreateTime(), + value.getUpdateTime() + ); + } } diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/service/IUserService.java b/blog-backend/src/main/java/cn/hamster3/application/blog/service/IUserService.java index 420dc99..d3419a3 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/service/IUserService.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/service/IUserService.java @@ -15,12 +15,12 @@ import org.springframework.data.domain.Pageable; import java.util.UUID; public interface IUserService { + @NotNull ResponseVO registerUser(@NotNull HttpServletRequest request, @NotNull UserCreateRequireVO requireVO); + @NotNull ResponseVO loginUser(@NotNull HttpServletRequest request, @NotNull UserLoginRequireVO requireVO); @NotNull ResponseVO getCurrentUserInfo(); - @NotNull ResponseVO createUser(@NotNull UserCreateRequireVO requireVO); - @NotNull ResponseVO updateUser(@NotNull UUID userID, @NotNull UserUpdateRequireVO requireVO); @NotNull ResponseVO> getAllUserInfo(@NotNull Pageable pageable); diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/service/impl/UserService.java b/blog-backend/src/main/java/cn/hamster3/application/blog/service/impl/UserService.java index 779eee1..d8d3fdc 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/service/impl/UserService.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/service/impl/UserService.java @@ -56,34 +56,7 @@ public class UserService implements IUserService { private AuthenticationManager authenticationManager; @Override - public @NotNull ResponseVO loginUser(@NotNull HttpServletRequest request, @NotNull UserLoginRequireVO requireVO) { - Authentication authenticate = authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken(requireVO.getEmail(), requireVO.getPassword()) - ); - log.info("authenticate: {}", authenticate); - if (!authenticate.isAuthenticated()) { - return ResponseVO.failed("login failed."); - } - HttpSession session = request.getSession(); - session.setAttribute("authenticate", authenticate); - return ResponseVO.success(); - } - - @Override - public @NotNull ResponseVO getCurrentUserInfo() { - UUID uuid = BlogUtils.getCurrentUserUUID().orElse(null); - if (uuid == null) { - return ResponseVO.unauthorized(); - } - return ResponseVO.success( - userRepo.findById(uuid) - .map(o -> userMapper.entityToInfoVO(o)) - .orElse(null) - ); - } - - @Override - public @NotNull ResponseVO createUser(@NotNull UserCreateRequireVO requireVO) { + public @NotNull ResponseVO registerUser(@NotNull HttpServletRequest request, @NotNull UserCreateRequireVO requireVO) { UserEntity entity = userMapper.voToEntity(requireVO); entity.setEmail(entity.getEmail().toLowerCase()); @@ -100,9 +73,40 @@ public class UserService implements IUserService { log.info("prepare to save userinfo: {}", entity); UserEntity save = userRepo.save(entity); + Authentication authenticate = authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken(requireVO.getEmail(), requireVO.getPassword()) + ); + HttpSession session = request.getSession(); + session.setAttribute("Authentication", authenticate); return ResponseVO.success("注册成功!", userMapper.entityToInfoVO(save)); } + @Override + public @NotNull ResponseVO loginUser(@NotNull HttpServletRequest request, @NotNull UserLoginRequireVO requireVO) { + Authentication authenticate = authenticationManager.authenticate( + new UsernamePasswordAuthenticationToken(requireVO.getEmail(), requireVO.getPassword()) + ); + log.info("authenticate: {}", authenticate); + if (!authenticate.isAuthenticated()) { + return ResponseVO.failed("authenticate failed."); + } + HttpSession session = request.getSession(); + session.setAttribute("Authentication", authenticate); + return ResponseVO.success("登录成功!", null); + } + + @Override + public @NotNull ResponseVO getCurrentUserInfo() { + UUID uuid = BlogUtils.getCurrentUserUUID().orElse(null); + if (uuid == null) { + return ResponseVO.unauthorized(); + } + return ResponseVO.success( + userRepo.findById(uuid) + .map(o -> userMapper.entityToInfoVO(o)) + .orElse(null)); + } + @Override public @NotNull ResponseVO updateUser(@NotNull UUID uuid, @NotNull UserUpdateRequireVO requireVO) { UserEntity userEntity = userRepo.findById(uuid).orElse(null); @@ -150,8 +154,7 @@ public class UserService implements IUserService { @Override public @NotNull ResponseVO> getAllUserInfo(@NotNull Pageable pageable) { return PageableVO.success( - userRepo.findAll(pageable).map(o -> userMapper.entityToInfoVO(o)) - ); + userRepo.findAll(pageable).map(o -> userMapper.entityToInfoVO(o))); } @Override @@ -165,15 +168,13 @@ public class UserService implements IUserService { public @NotNull ResponseVO> getUserBlogList(@NotNull UUID userID, @NotNull Pageable pageable) { return PageableVO.success( blogRepo.findByCreator_IdOrderByCreateTimeDesc(userID, pageable) - .map(o -> blogMapper.entityToInfoVO(o)) - ); + .map(o -> blogMapper.entityToInfoVO(o))); } @Override public @NotNull ResponseVO> getUserAttachList(@NotNull UUID userID, @NotNull Pageable pageable) { return PageableVO.success( attachRepo.findByCreator_IdOrderByCreateTimeDesc(userID, pageable) - .map(o -> attachMapper.entityToInfoVO(o)) - ); + .map(o -> attachMapper.entityToInfoVO(o))); } } diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogInfoResponseVO.java b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogInfoResponseVO.java index cffeef9..f85e3b7 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogInfoResponseVO.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogInfoResponseVO.java @@ -1,12 +1,10 @@ package cn.hamster3.application.blog.vo.blog; -import cn.hamster3.application.blog.entity.BlogAttachEntity; -import cn.hamster3.application.blog.entity.UserEntity; +import cn.hamster3.application.blog.vo.user.UserInfoResponseVO; import lombok.AllArgsConstructor; import lombok.Data; import java.util.Date; -import java.util.List; import java.util.Set; @Data @@ -15,14 +13,14 @@ public class BlogInfoResponseVO { private Long id; private String title; private String abstracts; - private String password; + // private String password; private String content; private Boolean top; private Boolean publish; private Set tags; - private List attachEntities; - private UserEntity creator; - private UserEntity updater; + // private List attachEntities; + private UserInfoResponseVO creator; + private UserInfoResponseVO updater; private Date createTime; private Date updateTime; } diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogUpdateRequireVO.java b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogUpdateRequireVO.java index a5d810e..302191e 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogUpdateRequireVO.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/blog/BlogUpdateRequireVO.java @@ -30,6 +30,6 @@ public class BlogUpdateRequireVO { private Boolean publish; - @NotNull + @NotNull(message = "标签不能为 null") private Set tags; } diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserCreateRequireVO.java b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserCreateRequireVO.java index dd50bb1..35c1162 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserCreateRequireVO.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserCreateRequireVO.java @@ -14,8 +14,9 @@ public class UserCreateRequireVO { @Length(max = 64, message = "邮箱地址最大长度不能超过 64 字符!") private String email; @NotBlank(message = "昵称不能为空!") - @Length(min = 1, max = 32, message = "用户昵称不能超过 32 个字符!") + @Length(max = 32, message = "用户昵称不能超过 32 个字符!") private String nickname; + @NotBlank(message = "密码不能为空!") @Length(min = 8, max = 32, message = "密码长度必须在 8~32 个字符之间!") private String password; } diff --git a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserInfoResponseVO.java b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserInfoResponseVO.java index 207f186..6951e8e 100644 --- a/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserInfoResponseVO.java +++ b/blog-backend/src/main/java/cn/hamster3/application/blog/vo/user/UserInfoResponseVO.java @@ -1,13 +1,10 @@ package cn.hamster3.application.blog.vo.user; import cn.hamster3.application.blog.constant.UserRole; -import cn.hamster3.application.blog.entity.AttachEntity; -import cn.hamster3.application.blog.entity.BlogEntity; import lombok.AllArgsConstructor; import lombok.Data; import java.util.Date; -import java.util.List; import java.util.UUID; @Data @@ -17,8 +14,8 @@ public class UserInfoResponseVO { private String email; private String nickname; private UserRole role; - private List blogEntities; - private List attachEntities; + // private List blogEntities; +// private List attachEntities; private Date createTime; private Date updateTime; } diff --git a/blog-frontend/index.html b/blog-frontend/index.html index d0e3fd4..6c45541 100644 --- a/blog-frontend/index.html +++ b/blog-frontend/index.html @@ -7,8 +7,7 @@ 网站标题 - + diff --git a/blog-frontend/src/App.vue b/blog-frontend/src/App.vue index a063db6..da25941 100644 --- a/blog-frontend/src/App.vue +++ b/blog-frontend/src/App.vue @@ -4,10 +4,12 @@ import { RouterView } from 'vue-router' import HeaderComponent from "@/components/HeaderComponent.vue" import FooterComponent from "@/components/FooterComponent.vue" -import { api, loadGlobalStore, siteSetting } from '@/api'; +import { api, globalStore, siteSetting } from '@/api'; -loadGlobalStore(); +globalStore.load(); +// 获取当前登录的用户信息 +api.updateCurrentUserInfo(); onMounted(() => { api.SettingController.getSettingContent(siteSetting.keys.site.css) .then(resp => { @@ -20,6 +22,7 @@ onMounted(() => { } }) }) + diff --git a/blog-frontend/src/main.ts b/blog-frontend/src/main.ts index eedade8..91feb20 100644 --- a/blog-frontend/src/main.ts +++ b/blog-frontend/src/main.ts @@ -3,6 +3,7 @@ import App from './App.vue' import router from './router' import './assets/main.css' +import 'element-plus/dist/index.css' const app = createApp(App) diff --git a/blog-frontend/src/router/index.ts b/blog-frontend/src/router/index.ts index fe09315..22f71cf 100644 --- a/blog-frontend/src/router/index.ts +++ b/blog-frontend/src/router/index.ts @@ -13,11 +13,6 @@ const router = createRouter({ name: 'register', component: () => import('@/views/RegisterView.vue') }, - { - path: '/tags', - name: 'tags', - component: () => import('@/views/TagsView.vue') - }, { path: '/login', name: 'login', @@ -27,7 +22,17 @@ const router = createRouter({ path: '/manage', name: 'manage', component: () => import('@/views/ManagePaneView.vue') - } + }, + { + path: '/tags', + name: 'tags', + component: () => import('@/views/TagsView.vue') + }, + { + path: '/blog/:id/', + name: 'blog', + component: () => import('@/views/BlogReadView.vue') + }, ] }) diff --git a/blog-frontend/src/utils/index.ts b/blog-frontend/src/utils/index.ts deleted file mode 100644 index e953c2a..0000000 --- a/blog-frontend/src/utils/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { api, globalStore, saveGlobalStore } from "@/api"; - -export function updateCurrentUserInfo() { - api.UserController.getCurrentUserInfo() - .then(resp => { - let vo = resp.data - if (vo.code === 200) { - globalStore.currentUserInfo = vo.data - console.log("current user info: ", vo.data) - } else { - globalStore.currentUserInfo = undefined - console.warn("ckeck current user info failed!") - } - saveGlobalStore() - }) -} \ No newline at end of file diff --git a/blog-frontend/src/views/AboutView.vue b/blog-frontend/src/views/AboutView.vue deleted file mode 100644 index 756ad2a..0000000 --- a/blog-frontend/src/views/AboutView.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/blog-frontend/src/views/BlogEditView.vue b/blog-frontend/src/views/BlogEditView.vue new file mode 100644 index 0000000..061b9f9 --- /dev/null +++ b/blog-frontend/src/views/BlogEditView.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/blog-frontend/src/views/BlogReadView.vue b/blog-frontend/src/views/BlogReadView.vue new file mode 100644 index 0000000..061b9f9 --- /dev/null +++ b/blog-frontend/src/views/BlogReadView.vue @@ -0,0 +1,33 @@ + + + + + \ No newline at end of file diff --git a/blog-frontend/src/views/HomeView.vue b/blog-frontend/src/views/HomeView.vue deleted file mode 100644 index d5c0217..0000000 --- a/blog-frontend/src/views/HomeView.vue +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/blog-frontend/src/views/IndexView.vue b/blog-frontend/src/views/IndexView.vue index 3f2985c..bb888a6 100644 --- a/blog-frontend/src/views/IndexView.vue +++ b/blog-frontend/src/views/IndexView.vue @@ -1,18 +1,29 @@