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