From 0bf868d3cdf9226e178c076d3b588ed5207409a0 Mon Sep 17 00:00:00 2001 From: kongzy <kongzy> Date: 星期五, 24 十一月 2023 17:51:40 +0800 Subject: [PATCH] merge --- assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 102 insertions(+), 0 deletions(-) diff --git a/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java new file mode 100644 index 0000000..18ba914 --- /dev/null +++ b/assess-framework/src/main/java/com/gkhy/assess/framework/shiro/realm/UserRealm.java @@ -0,0 +1,102 @@ +package com.gkhy.assess.framework.shiro.realm; + +import com.gkhy.assess.common.utils.RequestUtil; +import com.gkhy.assess.common.utils.SpringContextUtils; +import com.gkhy.assess.framework.shiro.JwtToken; +import com.gkhy.assess.framework.shiro.service.SysLoginService; +import com.gkhy.assess.system.domain.SysUser; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.cache.Cache; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.apache.shiro.subject.SimplePrincipalCollection; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashSet; +import java.util.Set; + +@Slf4j +@Component +public class UserRealm extends AuthorizingRealm { + + @Autowired + private SysLoginService sysLoginService; + /** + * 授权 + * @param principalCollection + * @return + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { + SysUser sysUser = (SysUser) principalCollection.getPrimaryPrincipal(); + Set<String> roles=new HashSet<>(); + Set<String> menus=new HashSet<>(); + SimpleAuthorizationInfo info=new SimpleAuthorizationInfo(); + info.addRole("admin"); + info.addStringPermission("*:*:*"); + return info; + } + + /** + * 认证 + * @param authenticationToken + * @return + * @throws AuthenticationException + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { + SysUser sysUser=null; + if(authenticationToken instanceof JwtToken){ + String token= (String) authenticationToken.getCredentials(); + if(token==null){ + HttpServletRequest req = SpringContextUtils.getHttpServletRequest(); + log.info("————————身份认证失败——————————IP地址: "+ RequestUtil.getRequestIp(req) +",URL:"+req.getRequestURI()); + throw new AuthenticationException("token为空!"); + } + sysUser=sysLoginService.validJwtToken(token); + if(sysUser!=null){ + return new SimpleAuthenticationInfo(sysUser,token,this.getName()); + } + }else{ + UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken; + String username = upToken.getUsername(); + String password=new String(upToken.getPassword()); + sysUser=sysLoginService.login(username,password); + if(sysUser!=null){ + return new SimpleAuthenticationInfo(sysUser,password,this.getName()); + } + } + + return null; + } + + + /** + * 清理指定用户授权信息缓存 + */ + public void clearCachedAuthorizationInfo(Object principal) + { + SimplePrincipalCollection principals = new SimplePrincipalCollection(principal, getName()); + this.clearCachedAuthorizationInfo(principals); + } + + /** + * 清理所有用户授权信息缓存 + */ + public void clearAllCachedAuthorizationInfo() + { + Cache<Object, AuthorizationInfo> cache = getAuthorizationCache(); + if (cache != null) + { + for (Object key : cache.keys()) + { + cache.remove(key); + } + } + } +} -- Gitblit v1.9.2