diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java index c7410ef58..4855de67d 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/service/PigxUserDetailsServiceImpl.java @@ -27,6 +27,8 @@ import com.pig4cloud.pigx.common.core.constant.SecurityConstants; import com.pig4cloud.pigx.common.core.util.R; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.UserDetails; @@ -48,6 +50,7 @@ import java.util.Set; @AllArgsConstructor public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { private final RemoteUserService remoteUserService; + private final CacheManager cacheManager; /** * 用户密码登录 @@ -58,8 +61,15 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { */ @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { + Cache cache = cacheManager.getCache("user_details"); + if (cache != null && cache.get(username) != null) { + return (PigxUser) cache.get(username).get(); + } + R result = remoteUserService.info(username, SecurityConstants.FROM_IN); - return getUserDetails(result); + UserDetails userDetails = getUserDetails(result); + cache.put(username, userDetails); + return userDetails; } @@ -96,12 +106,12 @@ public class PigxUserDetailsServiceImpl implements PigxUserDetailsService { } Collection authorities - = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); + = AuthorityUtils.createAuthorityList(dbAuthsSet.toArray(new String[0])); SysUser user = info.getSysUser(); boolean enabled = StrUtil.equals(user.getDelFlag(), CommonConstants.STATUS_NORMAL); // 构造security用户 return new PigxUser(user.getUserId(), user.getDeptId(), user.getTenantId(), user.getUsername(), SecurityConstants.BCRYPT + user.getPassword(), enabled, - true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities); + true, true, !CommonConstants.STATUS_LOCK.equals(user.getLockFlag()), authorities); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java index bf832570e..df1395bfa 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/UserController.java @@ -40,7 +40,7 @@ import javax.validation.Valid; /** * @author lengleng - * @date 2017/10/28 + * @date 2018/12/16 */ @RestController @AllArgsConstructor @@ -57,12 +57,12 @@ public class UserController { @GetMapping(value = {"/info"}) public R info() { String username = SecurityUtils.getUser().getUsername(); - SysUser sysUser = userService.getOne(Wrappers.query() - .lambda().eq(SysUser::getUsername, username)); - if (sysUser == null) { + SysUser user = userService.getOne(Wrappers.query() + .lambda().eq(SysUser::getUsername, username)); + if (user == null) { return new R<>(Boolean.FALSE, "获取当前用户信息失败"); } - return new R<>(userService.findUserInfo(sysUser)); + return new R<>(userService.findUserInfo(user)); } /** @@ -74,7 +74,7 @@ public class UserController { @GetMapping("/info/{username}") public R info(@PathVariable String username) { SysUser user = userService.getOne(Wrappers.query() - .lambda().eq(SysUser::getUsername, username)); + .lambda().eq(SysUser::getUsername, username)); if (user == null) { return new R<>(Boolean.FALSE, String.format("用户信息为空 %s", username)); } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java index d8ce7c842..62b3616e0 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java @@ -55,14 +55,14 @@ public class SmsLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String identify) { - SysUser sysUser = sysUserService - .getOne(Wrappers.query() - .lambda().eq(SysUser::getPhone, identify)); + SysUser user = sysUserService + .getOne(Wrappers.query() + .lambda().eq(SysUser::getPhone, identify)); - if (sysUser == null) { + if (user == null) { log.info("手机号未注册:{}", identify); return null; } - return sysUserService.findUserInfo(sysUser); + return sysUserService.findUserInfo(user); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java index 831e80242..02e7d11a2 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/WeChatLoginHandler.java @@ -75,14 +75,14 @@ public class WeChatLoginHandler extends AbstractLoginHandler { */ @Override public UserInfo info(String openId) { - SysUser sysUser = sysUserService + SysUser user = sysUserService .getOne(Wrappers.query() .lambda().eq(SysUser::getWxOpenid, openId)); - if (sysUser == null) { + if (user == null) { log.info("微信未绑定:{}", openId); return null; } - return sysUserService.findUserInfo(sysUser); + return sysUserService.findUserInfo(user); } } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java index 10360c9e3..ca221f10e 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysUserServiceImpl.java @@ -41,7 +41,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.cache.annotation.CacheEvict; -import org.springframework.cache.annotation.Cacheable; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -99,12 +98,7 @@ public class SysUserServiceImpl extends ServiceImpl impl * @return */ @Override - @Cacheable(value = "user_details", key = "#sysUser.username", unless = "#result == null") public UserInfo findUserInfo(SysUser sysUser) { - if (sysUser == null) { - return null; - } - UserInfo userInfo = new UserInfo(); userInfo.setSysUser(sysUser); //设置角色列表 (ID)