From dc31792dc1b8ad1658e49ba8fce9a1be924e6fbb Mon Sep 17 00:00:00 2001
From: wu <731351411@qq.com>
Date: 星期四, 30 十一月 2023 08:44:04 +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