Ver código fonte

添加app登录

wyyay 2 anos atrás
pai
commit
aa08c72168

+ 49 - 0
base-framework/src/main/java/com/ozs/framework/web/service/SysLoginService.java

@@ -100,6 +100,55 @@ public class SysLoginService
         // 生成token
         // 生成token
         return tokenService.createToken(loginUser);
         return tokenService.createToken(loginUser);
     }
     }
+    /**
+     * 登录验证
+     *
+     * @param username 用户名
+     * @param password 密码
+     * @param code 验证码
+     * @param uuid 唯一标识
+     * @return 结果
+     */
+    public String loginApp(String username, String password, String code, String uuid)
+    {
+        boolean captchaEnabled = configService.selectCaptchaEnabled();
+        // 验证码开关
+        if (captchaEnabled)
+        {
+            validateCaptcha(username, code, uuid);
+        }
+        // 用户验证
+        Authentication authentication = null;
+        try
+        {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        }
+        catch (Exception e)
+        {
+            if (e instanceof BadCredentialsException)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
+            else
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        }
+        finally
+        {
+            AuthenticationContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getId());
+        // 生成token
+        return tokenService.createTokenApp(loginUser);
+    }
 
 
     /**
     /**
      * 校验验证码
      * 校验验证码

+ 34 - 0
base-framework/src/main/java/com/ozs/framework/web/service/TokenService.java

@@ -42,6 +42,10 @@ public class TokenService
     @Value("${token.expireTime}")
     @Value("${token.expireTime}")
     private int expireTime;
     private int expireTime;
 
 
+    // 令牌有效期(默认30分钟)
+    @Value("${apptoken.expireTime}")
+    private int expireTimeApp;
+
     protected static final long MILLIS_SECOND = 1000;
     protected static final long MILLIS_SECOND = 1000;
 
 
     protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
     protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
@@ -118,6 +122,23 @@ public class TokenService
         claims.put(Constants.LOGIN_USER_KEY, token);
         claims.put(Constants.LOGIN_USER_KEY, token);
         return createToken(claims);
         return createToken(claims);
     }
     }
+    /**
+     * 创建令牌
+     *
+     * @param loginUser 用户信息
+     * @return 令牌
+     */
+    public String createTokenApp(LoginUser loginUser)
+    {
+        String token = IdUtils.fastUUID();
+        loginUser.setToken(token);
+        setUserAgent(loginUser);
+        refreshTokenApp(loginUser);
+
+        Map<String, Object> claims = new HashMap<>();
+        claims.put(Constants.LOGIN_USER_KEY, token);
+        return createToken(claims);
+    }
 
 
     /**
     /**
      * 验证令牌有效期,相差不足20分钟,自动刷新缓存
      * 验证令牌有效期,相差不足20分钟,自动刷新缓存
@@ -148,6 +169,19 @@ public class TokenService
         String userKey = getTokenKey(loginUser.getToken());
         String userKey = getTokenKey(loginUser.getToken());
         redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
         redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
     }
     }
+    /**
+     * 刷新令牌有效期
+     *
+     * @param loginUser 登录信息
+     */
+    public void refreshTokenApp(LoginUser loginUser)
+    {
+        loginUser.setLoginTime(System.currentTimeMillis());
+        loginUser.setExpireTime(loginUser.getLoginTime() + expireTimeApp * MILLIS_MINUTE);
+        // 根据uuid将loginUser缓存
+        String userKey = getTokenKey(loginUser.getToken());
+        redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
+    }
 
 
     /**
     /**
      * 设置用户代理信息
      * 设置用户代理信息