deason 9 meses atrás
pai
commit
61defda975

+ 33 - 4
src/main/java/cn/com/qmth/scancentral/bean/ScannerLoginInfo.java

@@ -6,18 +6,47 @@ import java.io.Serializable;
 
 /**
  * 登陆信息
- * 
  */
 public class ScannerLoginInfo implements Serializable {
 
     private static final long serialVersionUID = 1305354276321732681L;
 
-    /**
-     * 密码
-     */
+    @ApiModelProperty(value = "设备ID")
+    private String device;
+
+    @ApiModelProperty(value = "设备名称")
+    private String deviceName;
+
+    @ApiModelProperty(value = "设备IP", hidden = true)
+    private String deviceIp;
+
     @ApiModelProperty(value = "密码")
     private String password;
 
+    public String getDevice() {
+        return device;
+    }
+
+    public void setDevice(String device) {
+        this.device = device;
+    }
+
+    public String getDeviceName() {
+        return deviceName;
+    }
+
+    public void setDeviceName(String deviceName) {
+        this.deviceName = deviceName;
+    }
+
+    public String getDeviceIp() {
+        return deviceIp;
+    }
+
+    public void setDeviceIp(String deviceIp) {
+        this.deviceIp = deviceIp;
+    }
+
     public String getPassword() {
         return password;
     }

+ 7 - 3
src/main/java/cn/com/qmth/scancentral/controller/LoginController.java

@@ -7,6 +7,7 @@ import cn.com.qmth.scancentral.service.SessionService;
 import cn.com.qmth.scancentral.vo.AdminLoginVo;
 import cn.com.qmth.scancentral.vo.LogoutTimeVo;
 import cn.com.qmth.scancentral.vo.ScannerLoginVo;
+import com.qmth.boot.api.annotation.Aac;
 import com.qmth.boot.api.constant.ApiConstant;
 import com.qmth.boot.api.utils.RequestUtil;
 import io.swagger.annotations.Api;
@@ -34,16 +35,19 @@ public class LoginController extends BaseController {
     @PostMapping("/login")
     public AdminLoginVo login(@RequestParam String loginName, @RequestParam String password,
                               HttpServletRequest request) {
-        return AdminLoginVo.of(authService.adminLogin(loginName, password, RequestUtil.getIpAddress(request)));
+        String deviceIp = RequestUtil.getIpAddress(request);
+        return AdminLoginVo.of(authService.login(loginName, password, deviceIp));
     }
 
     @ApiOperation(value = "扫描员登录")
     @PostMapping("/scanner/login")
     public ScannerLoginVo scannerLogin(ScannerLoginInfo loginInfo, HttpServletRequest request) {
-        String ip = RequestUtil.getIpAddress(request);
-        return ScannerLoginVo.of(authService.login(ip, loginInfo));
+        String deviceIp = RequestUtil.getIpAddress(request);
+        loginInfo.setDeviceIp(deviceIp);
+        return ScannerLoginVo.of(authService.scannerLogin(loginInfo));
     }
 
+    @Aac(strict = false, auth = true)
     @ApiOperation(value = "登出接口")
     @PostMapping("/logout")
     public LogoutTimeVo logout() {

+ 2 - 5
src/main/java/cn/com/qmth/scancentral/controller/SystemController.java

@@ -18,10 +18,7 @@ import com.qmth.boot.core.exception.ParameterException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -61,7 +58,7 @@ public class SystemController extends BaseController {
 
     @Aac(auth = false)
     @ApiOperation(value = "服务端状态")
-    @RequestMapping("/status")
+    @RequestMapping(value = "/status", method = {RequestMethod.GET, RequestMethod.POST})
     public ApiStatusVo status(HttpServletRequest request) {
         ApiStatusVo vo = new ApiStatusVo();
         vo.setFileUriPrefix(sysProperty.getFileUriPrefix());

+ 2 - 11
src/main/java/cn/com/qmth/scancentral/service/AuthService.java

@@ -5,20 +5,11 @@ import cn.com.qmth.scancentral.bean.User;
 
 /**
  * 鉴权
- *
  */
 public interface AuthService {
 
-    /**
-     * 登录
-     *
-     * @author
-     * @param ip
-     * @param loginInfo
-     * @return
-     */
-    User login(String ip, ScannerLoginInfo loginInfo);
+    User login(String loginName, String password, String deviceIp);
 
-    User adminLogin(String loginName, String password, String device);
+    User scannerLogin(ScannerLoginInfo loginInfo);
 
 }

+ 4 - 5
src/main/java/cn/com/qmth/scancentral/service/ScannerService.java

@@ -1,18 +1,17 @@
 package cn.com.qmth.scancentral.service;
 
-import com.baomidou.mybatisplus.extension.service.IService;
-
+import cn.com.qmth.scancentral.bean.ScannerLoginInfo;
 import cn.com.qmth.scancentral.entity.ScannerEntity;
 import cn.com.qmth.scancentral.vo.scannerinfo.ScannerInfoVo;
+import com.baomidou.mybatisplus.extension.service.IService;
 
 /**
  * 鉴权
- *
  */
 public interface ScannerService extends IService<ScannerEntity> {
 
-    public void onLogin(String device);
+    void onLogin(ScannerLoginInfo device);
 
-    public ScannerInfoVo scannerInfo(Long examId);
+    ScannerInfoVo scannerInfo(Long examId);
 
 }

+ 44 - 30
src/main/java/cn/com/qmth/scancentral/service/impl/AuthServiceImpl.java

@@ -11,6 +11,7 @@ import cn.com.qmth.scancentral.service.AuthService;
 import cn.com.qmth.scancentral.service.ScannerService;
 import cn.com.qmth.scancentral.service.SessionService;
 import cn.com.qmth.scancentral.service.UserService;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qmth.boot.core.exception.ParameterException;
 import com.qmth.boot.core.security.annotation.AuthorizationComponent;
 import com.qmth.boot.core.security.service.AuthorizationService;
@@ -27,7 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
 @AuthorizationComponent
 public class AuthServiceImpl implements AuthorizationService<User>, AuthService {
 
-    protected static final Logger log = LoggerFactory.getLogger(AuthServiceImpl.class);
+    private static final Logger log = LoggerFactory.getLogger(AuthServiceImpl.class);
 
     @Autowired
     private UserService userService;
@@ -52,12 +53,46 @@ public class AuthServiceImpl implements AuthorizationService<User>, AuthService
         return true;
     }
 
+    @Override
+    public User login(String loginName, String password, String deviceIp) {
+        UserEntity userEntity = userService.getByLoginName(loginName);
+        if (userEntity == null) {
+            throw new ParameterException("用户不存在");
+        }
+        if (!userEntity.getEnable()) {
+            throw new ParameterException("用户已禁用");
+        }
+        if (!password.equals(userEntity.getPassword())) {
+            throw new ParameterException("密码错误");
+        }
+
+        LambdaUpdateWrapper<UserEntity> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(UserEntity::getDevice, deviceIp);
+        updateWrapper.eq(UserEntity::getId, userEntity.getId());
+        userService.update(updateWrapper);
+
+        User user = new User();
+        user.setRole(userEntity.getRole());
+        user.setAccount(loginName);
+        user.setAccessToken(RandomStringUtils.randomAlphanumeric(32));
+        user.buildKey();
+        user.setName(userEntity.getName());
+        user.setId(userEntity.getId());
+        sessionService.userLogin(user);
+        log.warn("登录成功! role:{} loginName:{}", userEntity.getRole(), loginName);
+        return user;
+    }
+
     @Transactional
     @Override
-    public User login(String ip, ScannerLoginInfo loginInfo) {
-        if (StringUtils.isBlank(ip)) {
-            throw new ParameterException("IP获取失败");
+    public User scannerLogin(ScannerLoginInfo loginInfo) {
+        if (StringUtils.isBlank(loginInfo.getDevice())) {
+            throw new ParameterException("device不能为空");
         }
+        if (StringUtils.isBlank(loginInfo.getDeviceName())) {
+            throw new ParameterException("deviceName不能为空");
+        }
+
         SystemConfigEntity config = systemConfigService.find();
         if (config != null) {
             if (config.getScannerEnableLogin() != null && !config.getScannerEnableLogin()) {
@@ -72,38 +107,17 @@ public class AuthServiceImpl implements AuthorizationService<User>, AuthService
                 }
             }
         }
+
         User user = new User();
         user.setRole(Role.SCANNER);
-        user.setAccount(ip);
+        user.setAccount(loginInfo.getDevice());
         user.setAccessToken(RandomStringUtils.randomAlphanumeric(32));
         user.buildKey();
-        scannerService.onLogin(ip);
+        user.setName(loginInfo.getDeviceName());
+        scannerService.onLogin(loginInfo);
         sessionService.userLogin(user);
-        return user;
-    }
 
-    @Override
-    public User adminLogin(String loginName, String password, String device) {
-        UserEntity userEntity = userService.getByLoginName(loginName);
-        if (userEntity == null) {
-            throw new ParameterException("用户不存在");
-        }
-        if (!userEntity.getEnable()) {
-            throw new ParameterException("用户已禁用");
-        }
-        if (!password.equals(userEntity.getPassword())) {
-            throw new ParameterException("密码错误");
-        }
-        userEntity.setDevice(device);
-        userService.saveOrUpdate(userEntity);
-        User user = new User();
-        user.setRole(userEntity.getRole());
-        user.setAccount(loginName);
-        user.setAccessToken(RandomStringUtils.randomAlphanumeric(32));
-        user.buildKey();
-        user.setId(userEntity.getId());
-        user.setName(userEntity.getName());
-        sessionService.userLogin(user);
+        log.warn("登录成功! role:{} device:{}_{} {}", Role.SCANNER, loginInfo.getDevice(), loginInfo.getDeviceName(), loginInfo.getDeviceIp());
         return user;
     }
 

+ 6 - 3
src/main/java/cn/com/qmth/scancentral/service/impl/ScannerServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.com.qmth.scancentral.service.impl;
 
+import cn.com.qmth.scancentral.bean.ScannerLoginInfo;
 import cn.com.qmth.scancentral.dao.ScannerDao;
 import cn.com.qmth.scancentral.entity.AnswerCardEntity;
 import cn.com.qmth.scancentral.entity.ScannerEntity;
@@ -40,12 +41,14 @@ public class ScannerServiceImpl extends ServiceImpl<ScannerDao, ScannerEntity> i
 
     @Transactional
     @Override
-    public void onLogin(String device) {
-        if (StringUtils.isBlank(device)) {
+    public void onLogin(ScannerLoginInfo loginInfo) {
+        if (StringUtils.isBlank(loginInfo.getDevice())) {
             throw new ParameterException("设备信息不能为空");
         }
+
         ScannerEntity e = new ScannerEntity();
-        e.setDevice(device);
+        e.setDevice(loginInfo.getDevice());
+        e.setDeviceName(loginInfo.getDeviceName());
         e.setLastLoginTime(new Date().getTime());
         this.saveOrUpdate(e);
     }

+ 12 - 0
src/main/java/cn/com/qmth/scancentral/vo/ScannerLoginVo.java

@@ -11,6 +11,8 @@ public class ScannerLoginVo {
 
     private Role role;
 
+    private String name;
+
     public String getSessionId() {
         return sessionId;
     }
@@ -35,11 +37,21 @@ public class ScannerLoginVo {
         this.role = role;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public static ScannerLoginVo of(User user) {
         ScannerLoginVo v = new ScannerLoginVo();
         v.setAccessToken(user.getAccessToken());
         v.setRole(user.getRole());
         v.setSessionId(user.getSessionId());
+        v.setName(user.getName());
         return v;
     }
+
 }