Jelajahi Sumber

代码优化

mrbird 6 tahun lalu
induk
melakukan
361b989702

+ 3 - 6
febs-auth/src/main/java/cc/mrbird/febs/auth/service/impl/SocialLoginServiceImpl.java

@@ -6,13 +6,13 @@ import cc.mrbird.febs.auth.manager.UserManager;
 import cc.mrbird.febs.auth.properties.FebsAuthProperties;
 import cc.mrbird.febs.auth.service.SocialLoginService;
 import cc.mrbird.febs.auth.service.UserConnectionService;
-import cc.mrbird.febs.common.entity.FebsAuthUser;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.constant.GrantTypeConstant;
 import cc.mrbird.febs.common.entity.constant.ParamsConstant;
 import cc.mrbird.febs.common.entity.constant.SocialConstant;
 import cc.mrbird.febs.common.entity.system.SystemUser;
 import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.HttpContextUtil;
 import cn.hutool.core.util.StrUtil;
 import com.xkcoding.justauth.AuthRequestFactory;
@@ -23,8 +23,6 @@ import me.zhyd.oauth.model.AuthUser;
 import me.zhyd.oauth.request.AuthRequest;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.security.oauth2.common.OAuth2AccessToken;
 import org.springframework.security.oauth2.provider.ClientDetails;
@@ -190,9 +188,8 @@ public class SocialLoginServiceImpl implements SocialLoginService {
     }
 
     private boolean isCurrentUser(String username) {
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        FebsAuthUser authUser = (FebsAuthUser) authentication.getPrincipal();
-        return StringUtils.equalsIgnoreCase(username, authUser.getUsername());
+        String currentUsername = FebsUtil.getCurrentUsername();
+        return StringUtils.equalsIgnoreCase(username, currentUsername);
     }
 
     private OAuth2AccessToken getOAuth2AccessToken(SystemUser user) throws FebsException {

+ 3 - 7
febs-common/src/main/java/cc/mrbird/febs/common/configure/FebsOAuth2FeignConfigure.java

@@ -1,11 +1,10 @@
 package cc.mrbird.febs.common.configure;
 
 import cc.mrbird.febs.common.entity.constant.FebsConstant;
+import cc.mrbird.febs.common.utils.FebsUtil;
 import com.google.common.net.HttpHeaders;
 import feign.RequestInterceptor;
 import org.springframework.context.annotation.Bean;
-import org.springframework.security.core.context.SecurityContextHolder;
-import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
 import org.springframework.util.Base64Utils;
 
 /**
@@ -22,11 +21,8 @@ public class FebsOAuth2FeignConfigure {
             String zuulToken = new String(Base64Utils.encode(FebsConstant.GATEWAY_TOKEN_VALUE.getBytes()));
             requestTemplate.header(FebsConstant.GATEWAY_TOKEN_HEADER, zuulToken);
             // 请求头中添加原请求头中的 Token
-            Object details = SecurityContextHolder.getContext().getAuthentication().getDetails();
-            if (details instanceof OAuth2AuthenticationDetails) {
-                String authorizationToken = ((OAuth2AuthenticationDetails) details).getTokenValue();
-                requestTemplate.header(HttpHeaders.AUTHORIZATION, FebsConstant.OAUTH2_TOKEN_TYPE + authorizationToken);
-            }
+            String authorizationToken = FebsUtil.getCurrentTokenValue();
+            requestTemplate.header(HttpHeaders.AUTHORIZATION, FebsConstant.OAUTH2_TOKEN_TYPE + authorizationToken);
         };
     }
 }

+ 5 - 6
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/aspect/ControllerEndpointAspect.java

@@ -3,7 +3,6 @@ package cc.mrbird.febs.server.system.aspect;
 import cc.mrbird.febs.common.annotation.ControllerEndpoint;
 import cc.mrbird.febs.common.exception.FebsException;
 import cc.mrbird.febs.common.utils.FebsUtil;
-import cc.mrbird.febs.common.utils.HttpContextUtil;
 import cc.mrbird.febs.server.system.service.ILogService;
 import org.apache.commons.lang3.StringUtils;
 import org.aspectj.lang.ProceedingJoinPoint;
@@ -11,11 +10,11 @@ import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
 import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
 import org.springframework.stereotype.Component;
 
-import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Method;
 
 /**
@@ -42,10 +41,10 @@ public class ControllerEndpointAspect extends AspectSupport {
         try {
             result = point.proceed();
             if (StringUtils.isNotBlank(operation)) {
-                HttpServletRequest request = HttpContextUtil.getHttpServletRequest();
-                Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+                OAuth2Authentication authentication = (OAuth2Authentication) SecurityContextHolder.getContext().getAuthentication();
+                OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) authentication.getDetails();
                 String username = (String) authentication.getPrincipal();
-                logService.saveLog(point, targetMethod, request, operation, username, start);
+                logService.saveLog(point, targetMethod, details.getRemoteAddress(), operation, username, start);
             }
             return result;
         } catch (Throwable throwable) {

+ 5 - 4
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/LoginLogController.java

@@ -35,16 +35,17 @@ public class LoginLogController {
         return new FebsResponse().data(dataTable);
     }
 
-    @GetMapping("/{username}")
-    public FebsResponse getUserLastSevenLoginLogs(@NotBlank(message = "{required}") @PathVariable String username) {
-        List<LoginLog> userLastSevenLoginLogs = this.loginLogService.findUserLastSevenLoginLogs(username);
+    @GetMapping("currentUser")
+    public FebsResponse getUserLastSevenLoginLogs() {
+        String currentUsername = FebsUtil.getCurrentUsername();
+        List<LoginLog> userLastSevenLoginLogs = this.loginLogService.findUserLastSevenLoginLogs(currentUsername);
         return new FebsResponse().data(userLastSevenLoginLogs);
     }
 
     @DeleteMapping("{ids}")
     @PreAuthorize("hasAuthority('loginlog:delete')")
     @ControllerEndpoint(operation = "删除登录日志", exceptionMessage = "删除登录日志失败")
-    public void deleteLogss(@NotBlank(message = "{required}") @PathVariable String ids) {
+    public void deleteLogs(@NotBlank(message = "{required}") @PathVariable String ids) {
         String[] loginLogIds = ids.split(StringPool.COMMA);
         this.loginLogService.deleteLoginLogs(loginLogIds);
     }

+ 15 - 19
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/controller/UserController.java

@@ -42,19 +42,20 @@ public class UserController {
     @Autowired
     private PasswordEncoder passwordEncoder;
 
-    @GetMapping("success/{username}")
-    public void loginSuccess(@NotBlank(message = "{required}") @PathVariable String username, HttpServletRequest request) {
+    @GetMapping("success")
+    public void loginSuccess(HttpServletRequest request) {
+        String currentUsername = FebsUtil.getCurrentUsername();
         // update last login time
-        this.userService.updateLoginTime(username);
+        this.userService.updateLoginTime(currentUsername);
         // save login log
         LoginLog loginLog = new LoginLog();
-        loginLog.setUsername(username);
+        loginLog.setUsername(currentUsername);
         loginLog.setSystemBrowserInfo(request.getHeader("user-agent"));
         this.loginLogService.saveLoginLog(loginLog);
     }
 
-    @GetMapping("index/{username}")
-    public FebsResponse index(@NotBlank(message = "{required}") @PathVariable String username) {
+    @GetMapping("index")
+    public FebsResponse index() {
         Map<String, Object> data = new HashMap<>();
         // 获取系统访问记录
         Long totalVisitCount = loginLogService.findTotalVisitCount();
@@ -67,7 +68,7 @@ public class UserController {
         List<Map<String, Object>> lastTenVisitCount = loginLogService.findLastTenDaysVisitCount(null);
         data.put("lastTenVisitCount", lastTenVisitCount);
         SystemUser param = new SystemUser();
-        param.setUsername(username);
+        param.setUsername(FebsUtil.getCurrentUsername());
         List<Map<String, Object>> lastTenUserVisitCount = loginLogService.findLastTenDaysVisitCount(param);
         data.put("lastTenUserVisitCount", lastTenUserVisitCount);
         return new FebsResponse().data(data);
@@ -116,26 +117,21 @@ public class UserController {
 
     @PutMapping("avatar")
     @ControllerEndpoint(exceptionMessage = "修改头像失败")
-    public void updateAvatar(
-            @NotBlank(message = "{required}") String username,
-            @NotBlank(message = "{required}") String avatar) {
-        this.userService.updateAvatar(username, avatar);
+    public void updateAvatar(@NotBlank(message = "{required}") String avatar) {
+        this.userService.updateAvatar(avatar);
     }
 
     @GetMapping("password/check")
-    public boolean checkPassword(
-            @NotBlank(message = "{required}") String username,
-            @NotBlank(message = "{required}") String password) {
-        SystemUser user = userService.findByName(username);
+    public boolean checkPassword(@NotBlank(message = "{required}") String password) {
+        String currentUsername = FebsUtil.getCurrentUsername();
+        SystemUser user = userService.findByName(currentUsername);
         return user != null && passwordEncoder.matches(password, user.getPassword());
     }
 
     @PutMapping("password")
     @ControllerEndpoint(exceptionMessage = "修改密码失败")
-    public void updatePassword(
-            @NotBlank(message = "{required}") String username,
-            @NotBlank(message = "{required}") String password) {
-        userService.updatePassword(username, password);
+    public void updatePassword(@NotBlank(message = "{required}") String password) {
+        userService.updatePassword(password);
     }
 
     @PutMapping("password/reset")

+ 2 - 2
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/ILogService.java

@@ -38,11 +38,11 @@ public interface ILogService extends IService<Log> {
      *
      * @param point     切点
      * @param method    Method
-     * @param request   HttpServletRequest
+     * @param ip        ip
      * @param operation 操作内容
      * @param username  操作用户
      * @param start     开始时间
      */
     @Async(FebsConstant.ASYNC_POOL)
-    void saveLog(ProceedingJoinPoint point, Method method, HttpServletRequest request, String operation, String username, long start);
+    void saveLog(ProceedingJoinPoint point, Method method, String ip, String operation, String username, long start);
 }

+ 3 - 5
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/IUserService.java

@@ -74,18 +74,16 @@ public interface IUserService extends IService<SystemUser> {
     /**
      * 更新用户头像
      *
-     * @param username 用户名
-     * @param avatar   用户头像
+     * @param avatar 用户头像
      */
-    void updateAvatar(String username, String avatar);
+    void updateAvatar(String avatar);
 
     /**
      * 更新用户密码
      *
-     * @param username 用户名
      * @param password 新密码
      */
-    void updatePassword(String username, String password);
+    void updatePassword(String password);
 
     /**
      * 重置密码

+ 1 - 4
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/LogServiceImpl.java

@@ -4,7 +4,6 @@ package cc.mrbird.febs.server.system.service.impl;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.constant.FebsConstant;
 import cc.mrbird.febs.common.entity.system.Log;
-import cc.mrbird.febs.common.utils.ServletRequestIPUtil;
 import cc.mrbird.febs.common.utils.SortUtil;
 import cc.mrbird.febs.server.system.mapper.LogMapper;
 import cc.mrbird.febs.server.system.service.ILogService;
@@ -23,7 +22,6 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.servlet.http.HttpServletRequest;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.*;
@@ -71,9 +69,8 @@ public class LogServiceImpl extends ServiceImpl<LogMapper, Log> implements ILogS
     }
 
     @Override
-    public void saveLog(ProceedingJoinPoint point, Method method, HttpServletRequest request, String operation, String username, long start) {
+    public void saveLog(ProceedingJoinPoint point, Method method, String ip, String operation, String username, long start) {
         Log log = new Log();
-        String ip = ServletRequestIPUtil.getIpAddr(request);
         log.setIp(ip);
 
         log.setUsername(username);

+ 10 - 10
febs-server/febs-server-system/src/main/java/cc/mrbird/febs/server/system/service/impl/UserServiceImpl.java

@@ -1,11 +1,12 @@
 package cc.mrbird.febs.server.system.service.impl;
 
-import cc.mrbird.febs.common.entity.FebsAuthUser;
+import cc.mrbird.febs.common.entity.CurrentUser;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.constant.FebsConstant;
 import cc.mrbird.febs.common.entity.system.SystemUser;
 import cc.mrbird.febs.common.entity.system.UserRole;
 import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.common.utils.SortUtil;
 import cc.mrbird.febs.server.system.mapper.UserMapper;
 import cc.mrbird.febs.server.system.service.IUserRoleService;
@@ -17,8 +18,6 @@ import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
@@ -124,18 +123,20 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, SystemUser> impleme
 
     @Override
     @Transactional
-    public void updateAvatar(String username, String avatar) {
+    public void updateAvatar(String avatar) {
         SystemUser user = new SystemUser();
         user.setAvatar(avatar);
-        this.baseMapper.update(user, new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getUsername, username));
+        String currentUsername = FebsUtil.getCurrentUsername();
+        this.baseMapper.update(user, new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getUsername, currentUsername));
     }
 
     @Override
     @Transactional
-    public void updatePassword(String username, String password) {
+    public void updatePassword(String password) {
         SystemUser user = new SystemUser();
         user.setPassword(passwordEncoder.encode(password));
-        this.baseMapper.update(user, new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getUsername, username));
+        String currentUsername = FebsUtil.getCurrentUsername();
+        this.baseMapper.update(user, new LambdaQueryWrapper<SystemUser>().eq(SystemUser::getUsername, currentUsername));
     }
 
     @Override
@@ -161,8 +162,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, SystemUser> impleme
     }
 
     private boolean isCurrentUser(Long id) {
-        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
-        FebsAuthUser authUser = (FebsAuthUser) authentication.getPrincipal();
-        return id.equals(authUser.getUserId());
+        CurrentUser currentUser = FebsUtil.getCurrentUser();
+        return currentUser != null && id.equals(currentUser.getUserId());
     }
 }

+ 1 - 5
febs-server/febs-server-test/src/main/java/cc/mrbird/febs/server/test/controller/TestController.java

@@ -1,19 +1,15 @@
 package cc.mrbird.febs.server.test.controller;
 
-import cc.mrbird.febs.common.entity.CurrentUser;
 import cc.mrbird.febs.common.entity.FebsResponse;
 import cc.mrbird.febs.common.entity.QueryRequest;
 import cc.mrbird.febs.common.entity.system.SystemUser;
 import cc.mrbird.febs.common.utils.FebsUtil;
 import cc.mrbird.febs.server.test.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.core.GrantedAuthority;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.security.Principal;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -39,7 +35,7 @@ public class TestController {
      * 获取当前用户信息
      */
     @GetMapping("user")
-    public Map<String, Object> currentUser(Principal principal) {
+    public Map<String, Object> currentUser() {
         Map<String, Object> map = new HashMap<>(5);
         map.put("currentUser", FebsUtil.getCurrentUser());
         map.put("currentUsername", FebsUtil.getCurrentUsername());