From 8a0ae6d19d78d2295a10b1cc97bfe17e651234ea Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期五, 01 十二月 2023 08:08:28 +0800
Subject: [PATCH] 更新理片笼逻辑
---
springboot-vue3/src/main/java/com/example/springboot/security/JWTRealm.java | 89 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 89 insertions(+), 0 deletions(-)
diff --git a/springboot-vue3/src/main/java/com/example/springboot/security/JWTRealm.java b/springboot-vue3/src/main/java/com/example/springboot/security/JWTRealm.java
new file mode 100644
index 0000000..182f0fd
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/security/JWTRealm.java
@@ -0,0 +1,89 @@
+package com.example.springboot.security;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
+import com.example.springboot.security.util.JwtUtil;
+import com.example.springboot.security.util.SecurityUtil;
+import com.example.springboot.entity.Permission;
+import com.example.springboot.entity.Role;
+import com.example.springboot.entity.RolePermission;
+import com.example.springboot.entity.User;
+import com.example.springboot.security.entity.JwtToken;
+import com.example.springboot.service.PermissionService;
+import com.example.springboot.service.RolePermissionService;
+import com.example.springboot.service.RoleService;
+import com.example.springboot.service.UserService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.authc.AuthenticationException;
+import org.apache.shiro.authc.AuthenticationInfo;
+import org.apache.shiro.authc.AuthenticationToken;
+import org.apache.shiro.authc.SimpleAuthenticationInfo;
+import org.apache.shiro.authz.AuthorizationInfo;
+import org.apache.shiro.authz.SimpleAuthorizationInfo;
+import org.apache.shiro.realm.AuthorizingRealm;
+import org.apache.shiro.subject.PrincipalCollection;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+@Slf4j
+public class JWTRealm extends AuthorizingRealm {
+ @Autowired
+ private UserService userService;
+ @Autowired
+ private RolePermissionService rolePermissionService;
+ @Autowired
+ private PermissionService permissionService;
+ @Autowired
+ private RoleService roleService;
+
+ @Override
+ public boolean supports(AuthenticationToken token) {
+ return token instanceof JwtToken;
+ }
+
+ @Override
+ protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
+ // 鎵ц鎺堟潈
+ SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
+ // 璁剧疆瑙掕壊
+ List<Role> roles = roleService.selectRoles(SecurityUtil.getCurrentUser().getRoleId(), true);
+ if (CollectionUtil.isEmpty(roles)) {
+ return null;
+ }
+ authorizationInfo.addRoles(roles.stream().map(Role::getName).collect(Collectors.toList()));
+ List<RolePermission> rolePermissions = rolePermissionService.lambdaQuery()
+ .eq(RolePermission::getState, 1)
+ .eq(RolePermission::getRoleId, SecurityUtil.getCurrentUser().getRoleId()).list();
+ Set<Permission> set = new HashSet<>();
+ for (RolePermission rolePermission : rolePermissions) {
+ List<Permission> permissions = permissionService.lambdaQuery().eq(Permission::getId, rolePermission.getPermissionId()).list();
+ set.addAll(permissions);
+ }
+ // 璁剧疆鏉冮檺
+ authorizationInfo.addStringPermissions(set.stream().map(Permission::getName).collect(Collectors.toList()));
+ return authorizationInfo;
+ }
+
+ @Override
+ protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
+ String token = (String) authenticationToken.getCredentials();
+ // 瑙e瘑鑾峰緱username锛岀敤浜庡拰鏁版嵁搴撹繘琛屽姣�
+ String username = JwtUtil.getUsernameByToken(token);
+ if (StrUtil.isBlank(username)) {
+ throw new AuthenticationException("token璁よ瘉澶辫触!");
+ }
+ User user = userService.selectByUsername(username);
+ // 鍒ゆ柇鐢ㄦ埛
+ if (user == null) {
+ throw new AuthenticationException("鐢ㄦ埛涓嶅瓨鍦�!");
+ }
+ if (user.getState() == 0) {
+ throw new AuthenticationException("璐﹀彿宸茶绂佺敤!");
+ }
+ return new SimpleAuthenticationInfo(user, token, getName());
+ }
+}
--
Gitblit v1.8.0