From 5f770d69a8aaa6be3862dc4d8ca2ff4d0e605bc5 Mon Sep 17 00:00:00 2001 From: Wonder Date: Fri, 10 Oct 2025 23:39:36 +0800 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=94=84Update:=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E5=88=87=E9=9D=A2=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hezhaohui/pc/aspect/AuthorizeAspect.java | 33 ++++++++++++++++--- .../pc/controller/ProductController.java | 6 ++++ .../pc/controller/UserController.java | 6 ++++ .../pc/mapper/UserPermissionMapper.java | 10 ++++++ .../cn/hezhaohui/pc/service/UserService.java | 5 +++ .../pc/service/impl/UserServiceImpl.java | 17 ++++++++++ .../pc/mapper/UserPermissionMapper.xml | 15 +++++++++ 7 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 src/main/java/cn/hezhaohui/pc/mapper/UserPermissionMapper.java create mode 100644 src/main/resources/cn/hezhaohui/pc/mapper/UserPermissionMapper.xml diff --git a/src/main/java/cn/hezhaohui/pc/aspect/AuthorizeAspect.java b/src/main/java/cn/hezhaohui/pc/aspect/AuthorizeAspect.java index 0d1460f..1d23b89 100644 --- a/src/main/java/cn/hezhaohui/pc/aspect/AuthorizeAspect.java +++ b/src/main/java/cn/hezhaohui/pc/aspect/AuthorizeAspect.java @@ -1,15 +1,28 @@ package cn.hezhaohui.pc.aspect; +import cn.hezhaohui.pc.annotation.PreAuthorize; +import cn.hezhaohui.pc.mapper.UserPermissionMapper; +import jakarta.annotation.Resource; import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; import org.springframework.stereotype.Component; +import java.lang.reflect.Method; +import java.util.List; + +import static cn.hezhaohui.pc.service.UserService.loginUser; + @Component @Aspect public class AuthorizeAspect { + @Resource + private UserPermissionMapper userPermissionMapper; + @Pointcut("@annotation(cn.hezhaohui.pc.annotation.PreAuthorize)") public void authorizePointCut() { @@ -17,14 +30,24 @@ public class AuthorizeAspect { /** * 对后端接口鉴权 - * 1. 获取当前用户角色 - * 2. 获取角色对应权限 - * 3. 判断当前权限标识符是否被包含 + * 1. 获取当前用户角色 + * 2. 获取角色对应权限 + * 3. 判断当前权限标识符是否被包含 + * * @return */ @Around("authorizePointCut()") public Object handle(ProceedingJoinPoint joinPoint) throws Throwable { - // TODO - return joinPoint.proceed(); + List permissions = userPermissionMapper.selectPermissionByUserId(loginUser.get().getId()); + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + Method method = signature.getMethod(); + String permission = method.getAnnotation(PreAuthorize.class).value(); + + if (permissions.contains(permission)) { + return joinPoint.proceed(); + } else { + throw new RuntimeException("权限不足"); + } } } diff --git a/src/main/java/cn/hezhaohui/pc/controller/ProductController.java b/src/main/java/cn/hezhaohui/pc/controller/ProductController.java index c375d48..d7a460c 100644 --- a/src/main/java/cn/hezhaohui/pc/controller/ProductController.java +++ b/src/main/java/cn/hezhaohui/pc/controller/ProductController.java @@ -1,5 +1,6 @@ package cn.hezhaohui.pc.controller; +import cn.hezhaohui.pc.annotation.PreAuthorize; import cn.hezhaohui.pc.entity.Product; import cn.hezhaohui.pc.service.ProductService; import io.swagger.v3.oas.annotations.Operation; @@ -19,30 +20,35 @@ public class ProductController { @GetMapping @Operation(summary = "列出所有商品") + @PreAuthorize("PRODUCT_READ") public List listAll() { return productService.listAll(); } @GetMapping("/{id}") @Operation(summary = "通过id查找商品") + @PreAuthorize("PRODUCT_READ") public Product findById(@PathVariable Long id) { return productService.getById(id); } @PostMapping @Operation(summary = "添加商品") + @PreAuthorize("PRODUCT_CREATE") public void add(@RequestBody Product product) { productService.saveProduct(product); } @PutMapping @Operation(summary = "更新商品") + @PreAuthorize("PRODUCT_UPDATE") public void update(@RequestBody Product product) { productService.updateProduct(product); } @DeleteMapping("/{id}") @Operation(summary = "删除商品") + @PreAuthorize("PRODUCT_DELETE") public void delete(@PathVariable Long id) { productService.deleteProduct(id); } diff --git a/src/main/java/cn/hezhaohui/pc/controller/UserController.java b/src/main/java/cn/hezhaohui/pc/controller/UserController.java index 0a62e03..fa369cf 100644 --- a/src/main/java/cn/hezhaohui/pc/controller/UserController.java +++ b/src/main/java/cn/hezhaohui/pc/controller/UserController.java @@ -16,6 +16,12 @@ public class UserController { @Resource private UserService userService; + @PostMapping("/login") + @Operation(summary = "用户登录") + public String login(@RequestBody User user) { + return userService.login(user); + } + @GetMapping @Operation(summary = "列出所有用户") public List listAll() { diff --git a/src/main/java/cn/hezhaohui/pc/mapper/UserPermissionMapper.java b/src/main/java/cn/hezhaohui/pc/mapper/UserPermissionMapper.java new file mode 100644 index 0000000..9f0316d --- /dev/null +++ b/src/main/java/cn/hezhaohui/pc/mapper/UserPermissionMapper.java @@ -0,0 +1,10 @@ +package cn.hezhaohui.pc.mapper; + +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +@Mapper +public interface UserPermissionMapper { + public List selectPermissionByUserId(Long userId); +} diff --git a/src/main/java/cn/hezhaohui/pc/service/UserService.java b/src/main/java/cn/hezhaohui/pc/service/UserService.java index 7b12444..7cd5fce 100644 --- a/src/main/java/cn/hezhaohui/pc/service/UserService.java +++ b/src/main/java/cn/hezhaohui/pc/service/UserService.java @@ -5,10 +5,15 @@ import cn.hezhaohui.pc.entity.User; import java.util.List; public interface UserService { + + ThreadLocal loginUser = new ThreadLocal<>(); + List listAll(); User getById(Long id); void saveUser(User user); void updateUser(User user); void deleteUser(Long id); + String login(User user); + String logout(); } diff --git a/src/main/java/cn/hezhaohui/pc/service/impl/UserServiceImpl.java b/src/main/java/cn/hezhaohui/pc/service/impl/UserServiceImpl.java index 7d6ab32..0265cca 100644 --- a/src/main/java/cn/hezhaohui/pc/service/impl/UserServiceImpl.java +++ b/src/main/java/cn/hezhaohui/pc/service/impl/UserServiceImpl.java @@ -3,6 +3,7 @@ package cn.hezhaohui.pc.service.impl; import cn.hezhaohui.pc.entity.User; import cn.hezhaohui.pc.mapper.UserMapper; import cn.hezhaohui.pc.service.UserService; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -11,6 +12,9 @@ import java.util.List; @Service public class UserServiceImpl implements UserService { + + ThreadLocal loginUser = new ThreadLocal<>(); + @Resource private UserMapper userMapper; @@ -43,4 +47,17 @@ public class UserServiceImpl implements UserService { public void deleteUser(Long id) { userMapper.deleteById(id); } + + @Override + public String login(User user) { + User result = userMapper.selectOne(new QueryWrapper().eq("username", user.getUsername())); + loginUser.set(result); + return "Hello, " + result.getUsername() + "!"; + } + + @Override + public String logout() { + loginUser.remove(); + return "Good bye!"; + } } diff --git a/src/main/resources/cn/hezhaohui/pc/mapper/UserPermissionMapper.xml b/src/main/resources/cn/hezhaohui/pc/mapper/UserPermissionMapper.xml new file mode 100644 index 0000000..a08bf5d --- /dev/null +++ b/src/main/resources/cn/hezhaohui/pc/mapper/UserPermissionMapper.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file