瀏覽代碼

07 26 02 登录

hr 4 年之前
父節點
當前提交
993505c2e1

+ 84 - 0
src/main/java/com/imed/costaccount/common/aop/LogAspect.java

@@ -0,0 +1,84 @@
+package com.imed.costaccount.common.aop;
+
+import cn.hutool.core.net.NetUtil;
+import cn.hutool.json.JSONUtil;
+import com.imed.costaccount.common.util.Result;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Aspect
+@Slf4j
+@Component
+public class LogAspect {
+
+    /**
+     * ..表示包及子包 该方法代表controller层的所有方法  TODO 路径需要根据自己项目定义
+     */
+    @Pointcut("execution(public * com.imed.costaccount.web.*.*(..))")
+    public void controllerMethod() {
+    }
+
+
+    /**
+     * 方法执行前
+     *
+     * @param joinPoint
+     * @throws Exception
+     */
+    @Before("controllerMethod()")
+    public void LogRequestInfo(JoinPoint joinPoint) throws Exception {
+
+        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+        HttpServletRequest request = attributes.getRequest();
+
+        StringBuilder requestLog = new StringBuilder();
+        Signature signature = joinPoint.getSignature();
+        requestLog.append(((MethodSignature) signature).getMethod().getAnnotation(ApiOperation.class).value()).append("\t")
+                .append("请求信息:").append("URL = {").append(request.getRequestURI()).append("},\t")
+                .append("请求方式 = {").append(request.getMethod()).append("},\t")
+                .append("请求IP = {").append(NetUtil.getLocalhostStr()).append("},\t")
+                .append("类方法 = {").append(signature.getDeclaringTypeName()).append(".")
+                .append(signature.getName()).append("},\t");
+
+        // 处理请求参数
+        String[] paramNames = ((MethodSignature) signature).getParameterNames();
+        Object[] paramValues = joinPoint.getArgs();
+        int paramLength = null == paramNames ? 0 : paramNames.length;
+        if (paramLength == 0) {
+            requestLog.append("请求参数 = {} ");
+        } else {
+            requestLog.append("请求参数 = [");
+            for (int i = 0; i < paramLength - 1; i++) {
+                requestLog.append(paramNames[i]).append("=").append(JSONUtil.toJsonStr(paramValues[i])).append(",");
+            }
+            requestLog.append(paramNames[paramLength - 1]).append("=").append(JSONUtil.toJsonStr(paramValues[paramLength - 1])).append("]");
+        }
+
+        log.info(requestLog.toString());
+    }
+
+
+    /**
+     * 方法执行后
+     *
+     * @param result
+     * @throws Exception
+     */
+    @AfterReturning(returning = "result", pointcut = "controllerMethod()")
+    public void logResultVOInfo(Result result) throws Exception {
+        log.info("请求结果:" + result.getStatus() + "\t" + result.getMsg());
+    }
+
+}

+ 36 - 0
src/main/java/com/imed/costaccount/common/aop/TokenAspect.java

@@ -0,0 +1,36 @@
+package com.imed.costaccount.common.aop;
+
+import cn.hutool.core.util.StrUtil;
+import com.imed.costaccount.common.token.ThreadLocalToken;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+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.stereotype.Component;
+
+@Aspect
+@Component
+@Slf4j
+public class TokenAspect {
+
+    @Autowired
+    private ThreadLocalToken local;
+
+    @Pointcut("execution(public * com.imed.costaccount.web.*.*(..)))")
+    public void tokenPointCut() {
+
+    }
+
+    @Around("tokenPointCut()")
+    public Object tokenAround(ProceedingJoinPoint point) throws Throwable {
+        String token = local.getToken();
+        Object result =  point.proceed();
+        if (StrUtil.isBlank(token)) {
+            return result;
+        }
+        local.clear();
+        return result;
+    }
+}

+ 4 - 4
src/main/java/com/imed/costaccount/common/exception/CostException.java

@@ -4,11 +4,11 @@ import com.imed.costaccount.common.constants.CommonConstant;
 
 public class CostException extends RuntimeException{
 
-    private String code;
+    private int code;
 
     private String message;
 
-    public CostException(String code, String message) {
+    public CostException(int code, String message) {
         super(message);
         this.code = code;
         this.message = message;
@@ -16,12 +16,12 @@ public class CostException extends RuntimeException{
 
     public CostException(String message) {
         super(message);
-        this.code = CommonConstant.ERROR;
+        this.code = 500;
         this.message = message;
     }
 
 
-    public String getCode() {
+    public Integer getCode() {
         return code;
     }
 

+ 19 - 19
src/main/java/com/imed/costaccount/common/shiro/OAuth2Realm.java

@@ -1,7 +1,10 @@
 package com.imed.costaccount.common.shiro;
 
 import cn.hutool.core.util.StrUtil;
+import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.token.JwtUtil;
+import com.imed.costaccount.model.User;
+import com.imed.costaccount.service.UserService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.authc.AuthenticationException;
 import org.apache.shiro.authc.AuthenticationInfo;
@@ -13,6 +16,8 @@ import org.apache.shiro.subject.PrincipalCollection;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.util.Objects;
+
 /**
  * 认证和授权在这里操作
  */
@@ -23,9 +28,13 @@ public class OAuth2Realm extends AuthorizingRealm {
     @Autowired
     private JwtUtil jwtUtil;
 
+    @Autowired
+    private UserService userService;
+
 
     /**
      * 是否需要认证
+     *
      * @param token
      * @return
      */
@@ -36,6 +45,7 @@ public class OAuth2Realm extends AuthorizingRealm {
 
     /**
      * 登录认证
+     *
      * @param token token
      * @return
      * @throws AuthenticationException
@@ -45,38 +55,28 @@ public class OAuth2Realm extends AuthorizingRealm {
         String principal = (String) token.getPrincipal();
         if (StrUtil.isEmpty(principal)) {
             log.error("当前请求未携带token");
-//            throw new PfmException(PfmExceptionEnum.ForbiddenException);
-            // TODO: 2021/7/23
+            throw new CostException(499, "登录失败,请重新登录");
         }
         int userId = jwtUtil.getUserId(principal);
-//        SysEmployee employee = employeeService.queryById(userId);
-//        if (Objects.isNull(employee)) {
-//            log.error("当前token{}", principal);
-//            throw new PfmException(499, "登录失败,请重新登录");
-//        }
+        User user = userService.getById(userId);
+        if (Objects.isNull(user)) {
+            log.error("当前token{}", principal);
+            throw new CostException(499, "登录失败,请重新登录");
+        }
 
-        // TODO: 2021/7/23
-        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(null, principal, getName());
+        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, principal, getName());
         return info;
     }
 
     /**
      * 授权对象
+     *
      * @param principals
      * @return
      */
     @Override
     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
-//        SysEmployee employee = (SysEmployee) principals.getPrimaryPrincipal();
-
-        // todo 根据后续需求完成动态配置
-//        String managerRole = employee.getManagerRole();
-//        String[] split = managerRole.split(StrUtil.COMMA);
-//        Set<String> permissions = Arrays.stream(split).map(RoleEnum::getRole).collect(Collectors.toSet());
-//        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
-//        info.setStringPermissions(permissions);
-//        return info;
-        // TODO: 2021/7/23
+        // TODO: 2021/7/23 暂未设置权限
         return null;
     }
 

+ 0 - 3
src/main/java/com/imed/costaccount/common/shiro/ShiroConfig.java

@@ -46,9 +46,6 @@ public class ShiroConfig {
         filterMap.put("/doc.html", "anon");
         filterMap.put("/swagger-resources/**", "anon");
         filterMap.put("/captcha.jpg", "anon");
-        filterMap.put("/user/register", "anon");
-        filterMap.put("/employee/demo", "anon");
-        filterMap.put("/employee/login", "anon");
         filterMap.put("/**/*.jpg", "anon");
         filterMap.put("/**/*.png", "anon");
 

+ 9 - 8
src/main/java/com/imed/costaccount/service/impl/UserServiceImpl.java

@@ -1,24 +1,19 @@
 package com.imed.costaccount.service.impl;
 
 import cn.hutool.crypto.SecureUtil;
-import cn.hutool.crypto.digest.MD5;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.imed.costaccount.common.exception.CostException;
 import com.imed.costaccount.common.token.JwtUtil;
-import com.imed.costaccount.common.util.PageUtils;
 import com.imed.costaccount.mapper.UserMapper;
 import com.imed.costaccount.model.User;
 import com.imed.costaccount.model.dto.LoginDTO;
 import com.imed.costaccount.model.vo.LoginVO;
+import com.imed.costaccount.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import java.util.Map;
-import java.util.Objects;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.imed.costaccount.service.UserService;
+import java.util.Objects;
 
 
 @Service("userService")
@@ -27,6 +22,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Autowired
     private JwtUtil jwtUtil;
 
+
+    /**
+     * 登录具体逻辑
+     * @param loginDTO {@link LoginDTO} 登录相关参数
+     * @return
+     */
     @Override
     public LoginVO login(LoginDTO loginDTO) {
         String hospSign = loginDTO.getHospSign();