Prechádzať zdrojové kódy

添加刷卡登录接口

Frankensteinly 1 rok pred
rodič
commit
cac47dbfff

+ 1 - 0
ktg-framework/src/main/java/com/ktg/framework/config/SecurityConfig.java

@@ -99,6 +99,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
                 .antMatchers("/login", "/register", "/captchaImage").anonymous()
                 .antMatchers("/mobile/login/**").permitAll()
+                .antMatchers("/iscs/card/login").permitAll()
                 .antMatchers(
                         HttpMethod.GET,
                         "/",

+ 33 - 0
ktg-framework/src/main/java/com/ktg/framework/web/service/SysLoginService.java

@@ -6,6 +6,9 @@ import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
+import org.springframework.security.core.authority.AuthorityUtils;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.stereotype.Component;
 import com.ktg.common.constant.Constants;
 import com.ktg.common.core.domain.entity.SysUser;
@@ -48,6 +51,9 @@ public class SysLoginService
     @Autowired
     private ISysConfigService configService;
 
+    @Resource
+    private SysPermissionService permissionService;
+
     /**
      * 登录验证
      *
@@ -93,6 +99,33 @@ public class SysLoginService
         return tokenService.createToken(loginUser);
     }
 
+    public String loginWithoutPassword(SysUser sysUser) {
+        // 用户验证
+        Authentication authentication;
+        try {
+            //直接不用springsecurity 认证、自己构造出数据
+            UserDetails userDetails = new LoginUser(sysUser.getUserId(), sysUser.getDeptId(), sysUser, permissionService.getMenuPermission(sysUser));
+            authentication = new UsernamePasswordAuthenticationToken(userDetails, null,
+                    AuthorityUtils.createAuthorityList("ROLE_USER"));
+            SecurityContextHolder.getContext().setAuthentication(authentication);
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        } finally {
+            SecurityContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getUserId());
+        // 生成token
+        return tokenService.createToken(loginUser);
+    }
+
     /**
      * 校验验证码
      *

+ 7 - 0
ktg-iscs/src/main/java/com/ktg/iscs/controller/IsJobCardController.java

@@ -8,6 +8,7 @@ import com.ktg.common.enums.BusinessType;
 import com.ktg.common.pojo.CommonResult;
 import com.ktg.common.utils.poi.ExcelUtil;
 import com.ktg.iscs.domain.IsJobCard;
+import com.ktg.iscs.domain.vo.card.IsJobCardLoginReqVO;
 import com.ktg.iscs.service.IIsJobCardService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -113,4 +114,10 @@ public class IsJobCardController extends BaseController
     {
         return CommonResult.success(isJobCardService.deleteIsJobCardByCardIds(cardIds) != 0);
     }
+
+    @ApiOperation("工作卡登录")
+    @PostMapping("/login")
+    public CommonResult<String> loginByCard(@RequestBody IsJobCardLoginReqVO reqVO) {
+        return CommonResult.success(isJobCardService.loginByCard(reqVO));
+    }
 }

+ 12 - 0
ktg-iscs/src/main/java/com/ktg/iscs/domain/vo/card/IsJobCardLoginReqVO.java

@@ -0,0 +1,12 @@
+package com.ktg.iscs.domain.vo.card;
+
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 刷卡登录Request VO
+ */
+public class IsJobCardLoginReqVO {
+
+    @ApiModelProperty(value = "工作卡NFC")
+    public String cardNfc;
+}

+ 6 - 0
ktg-iscs/src/main/java/com/ktg/iscs/mapper/IsJobCardMapper.java

@@ -1,6 +1,7 @@
 package com.ktg.iscs.mapper;
 
 import com.ktg.common.mapper.BaseMapperX;
+import com.ktg.common.query.LambdaQueryWrapperX;
 import com.ktg.iscs.domain.IsJobCard;
 import org.apache.ibatis.annotations.Mapper;
 
@@ -62,4 +63,9 @@ public interface IsJobCardMapper extends BaseMapperX<IsJobCard>
      * @return 结果
      */
     int deleteIsJobCardByCardIds(Long[] cardIds);
+
+    default IsJobCard selectByNfc(String cardNfc) {
+        return selectOne(new LambdaQueryWrapperX<IsJobCard>()
+                .eq(IsJobCard::getCardNfc, cardNfc));
+    }
 }

+ 6 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/IIsJobCardService.java

@@ -2,6 +2,7 @@ package com.ktg.iscs.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ktg.iscs.domain.IsJobCard;
+import com.ktg.iscs.domain.vo.card.IsJobCardLoginReqVO;
 
 import java.util.List;
 
@@ -60,4 +61,9 @@ public interface IIsJobCardService extends IService<IsJobCard>
      * @return 结果
      */
     int deleteIsJobCardByCardId(Long cardId);
+
+    /**
+     * 刷卡登录
+     */
+    String loginByCard(IsJobCardLoginReqVO reqVO);
 }

+ 23 - 0
ktg-iscs/src/main/java/com/ktg/iscs/service/impl/IsJobCardServiceImpl.java

@@ -2,14 +2,19 @@ package com.ktg.iscs.service.impl;
 
 import cn.hutool.core.lang.Assert;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ktg.common.core.domain.entity.SysUser;
 import com.ktg.common.core.text.Convert;
 import com.ktg.common.utils.DateUtils;
+import com.ktg.framework.web.service.SysLoginService;
 import com.ktg.iscs.domain.IsJobCard;
+import com.ktg.iscs.domain.vo.card.IsJobCardLoginReqVO;
 import com.ktg.iscs.mapper.IsJobCardMapper;
 import com.ktg.iscs.service.IIsJobCardService;
+import com.ktg.system.mapper.SysUserMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
 
 /**
@@ -24,6 +29,12 @@ public class IsJobCardServiceImpl extends ServiceImpl<IsJobCardMapper, IsJobCard
     @Autowired
     private IsJobCardMapper isJobCardMapper;
 
+    @Resource
+    private SysUserMapper sysUserMapper;
+
+    @Resource
+    private SysLoginService sysLoginService;
+
     /**
      * 查询工作卡
      *
@@ -99,4 +110,16 @@ public class IsJobCardServiceImpl extends ServiceImpl<IsJobCardMapper, IsJobCard
     {
         return isJobCardMapper.deleteIsJobCardByCardId(cardId);
     }
+
+    @Override
+    public String loginByCard(IsJobCardLoginReqVO reqVO) {
+        Assert.notBlank(reqVO.cardNfc, "请输入卡号!");
+        IsJobCard isJobCard = isJobCardMapper.selectByNfc(reqVO.cardNfc);
+        Assert.notNull(isJobCard, "卡不存在!");
+        Long userId = isJobCard.getUserId();
+        SysUser sysUser = sysUserMapper.selectUserById(userId);
+        Assert.notNull(sysUser, "没有关联用户!");
+
+        return sysLoginService.loginWithoutPassword(sysUser);
+    }
 }