Browse Source

增加账号有效期限制

xusl 2 years ago
parent
commit
c93c92292e

+ 22 - 0
backend/src/main/java/com/jiayue/ssi/controller/SysUserController.java

@@ -165,6 +165,10 @@ public class SysUserController {
             // 加密邮箱
             user.setMailbox(AesUtils.encryptHex(user.getMailbox()).toUpperCase());
 
+            if (user.getExpDate()!=null) {
+                System.out.println(user.getExpDate());
+            }
+
 //        // 生成8位初始密码
 //        String randomPwd = RandomPwd.getRandomPwd(8);
 //        user.setPassword(SmUtil.sm3(randomPwd).toUpperCase());
@@ -198,6 +202,19 @@ public class SysUserController {
                 return ResponseVO.fail("非法访问不能修改!");
             }
 
+            // 获取审批表是否存在此操作
+            QueryWrapper<SysApprove> wrapper = new QueryWrapper<>();
+            // 条件:待审批
+            wrapper.eq("approve_status", ApproveStatusEnum.DSP.getCode());
+            // 条件:删除操作
+            wrapper.eq("master_id", user.getId());
+            // 条件:实体名
+            wrapper.eq("entity_name", "SysUser");
+            List<SysApprove> list = sysApproveService.list(wrapper);
+            if (list.size() > 0) {
+                return ResponseVO.fail("此记录存在未审批的操作,不能进行修改!");
+            }
+
             if (StringUtils.isEmpty(user.getUsername())) {
                 return ResponseVO.fail("用户账号不能为空!");
             } else if (user.getUsername().length() < 5 || user.getUsername().length() > 20) {
@@ -243,6 +260,11 @@ public class SysUserController {
                 user.setErrNum(0);
                 user.setLockTime(0L);
             }
+
+            if (user.getExpDate()==null) {
+                user.setExpDate(null);
+            }
+
             boolean bo = sysUserService.updateUser(user);
             if (bo) {
                 return ResponseVO.success("修改用户信息成功");

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/entity/SysBlacklist.java

@@ -22,7 +22,7 @@ public class SysBlacklist {
     /** IP地址 */
     private String ip;
     /** ip锁定时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date ipTime;
     /** 添加者 */
     private String addBy;

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/entity/SysLogininfor.java

@@ -38,7 +38,7 @@ public class SysLogininfor extends BaseEntity
     private String msg;
 
     /** 访问时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date loginTime;
 
     public Long getInfoId()

+ 1 - 1
backend/src/main/java/com/jiayue/ssi/entity/SysOperLog.java

@@ -66,7 +66,7 @@ public class SysOperLog extends BaseEntity {
     private String errorMsg;
 
     /** 操作时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date operTime;
 
     /** 消耗时间 毫秒*/

+ 9 - 2
backend/src/main/java/com/jiayue/ssi/entity/SysUser.java

@@ -57,13 +57,13 @@ public class SysUser extends BaseEntity implements UserDetails {
      */
     private Long lockTime;
     /** 最后修改密码时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date lastUpdatePwdTime;
     /** 最后登录IP */
     private String loginIp;
 
     /** 最后登录时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
     private Date loginDate;
 
     /**
@@ -71,6 +71,13 @@ public class SysUser extends BaseEntity implements UserDetails {
      */
     private String usertype;
 
+    /**
+     * 账号有效期
+     */
+    @TableField(value = "exp_date",fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
+    private Date expDate;
+
     @Override
     public boolean isEnabled() {
         return true;

+ 28 - 2
backend/src/main/java/com/jiayue/ssi/filter/JwtAuthenticationTokenFilter.java

@@ -1,6 +1,7 @@
 package com.jiayue.ssi.filter;
 
 import java.io.IOException;
+import java.util.Date;
 
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
@@ -8,7 +9,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.jiayue.ssi.constant.CacheConstants;
+import com.jiayue.ssi.entity.SysUser;
 import com.jiayue.ssi.service.impl.UserServiceImpl;
+import com.jiayue.ssi.util.DateUtils;
 import com.jiayue.ssi.util.ResponseInfo;
 import lombok.RequiredArgsConstructor;
 import org.springframework.core.annotation.Order;
@@ -28,6 +31,7 @@ import com.jiayue.ssi.util.JwtTokenUtil;
 @RequiredArgsConstructor
 @Order(10)
 public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
+    private String defaultFilterProcessUrl = "/user/login";
 
     UserServiceImpl userServiceImpl;
     JwtTokenUtil jwtTokenUtil;
@@ -61,6 +65,15 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
 
             if (username != null && SecurityContextHolder.getContext().getAuthentication() == null){
                 UserDetails userDetails = userServiceImpl.loadUserByUsername(username);
+                SysUser user = (SysUser) userDetails;
+                if (user.getExpDate()!=null){
+                    // 判断账号截止日期
+                    Date lastDate = DateUtils.getDayLastTime(user.getExpDate());
+                    if (new Date().after(lastDate)){
+                        ResponseInfo.doResponse(response, "账号有效期已失效,请联系管理员!", 403);
+                        return;
+                    }
+                }
                 if (jwtTokenUtil.validateToken(token, userDetails)){
                     // 将用户信息存入 authentication,方便后续校验
                     UsernamePasswordAuthenticationToken
@@ -71,8 +84,21 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
                 }
             }
         }
+        else{
+            if ("POST".equalsIgnoreCase(request.getMethod()) && defaultFilterProcessUrl.equals(request.getServletPath())) {
+                // 用户名密码登录提交,判断账号有效期
+                UserDetails userDetails = userServiceImpl.loadUserByUsername(request.getParameter("username"));
+                SysUser user = (SysUser) userDetails;
+                if (user.getExpDate()!=null){
+                    // 判断账号截止日期
+                    Date lastDate = DateUtils.getDayLastTime(user.getExpDate());
+                    if (new Date().after(lastDate)){
+                        ResponseInfo.doResponse(response, "账号有效期已失效,请联系管理员!", 403);
+                        return;
+                    }
+                }
+            }
+        }
         chain.doFilter(request, response);
     }
-
-
 }

+ 6 - 8
backend/src/main/java/com/jiayue/ssi/service/impl/UserServiceImpl.java

@@ -1,7 +1,8 @@
 package com.jiayue.ssi.service.impl;
 
 
-import com.jiayue.ssi.service.SysParameterService;
+import com.jiayue.ssi.entity.SysPolicy;
+import com.jiayue.ssi.service.SysPolicyService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UserDetails;
@@ -25,7 +26,7 @@ public class UserServiceImpl implements UserDetailsService {
     @Autowired
     SysUserMapper sysUserMapper;
     @Autowired
-    SysParameterService sysParameterService;
+    SysPolicyService sysPolicyService;
 
     @Override
     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
@@ -33,12 +34,9 @@ public class UserServiceImpl implements UserDetailsService {
         if (sysUser == null) {
             throw new UsernameNotFoundException("用户名错误!");
         } else {
-            int lockedTime = 1200000;
-            try {
-                lockedTime = Integer.parseInt(sysParameterService.queryByKey("lockedTime", "1200000"));
-            } catch (Exception e) {
-                // 日志输出转换失败的提示
-            }
+            SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
+            // 锁定时长
+            int lockedTime = sysPolicy.getLoginLock()*1000*60;
             if (sysUser.getStatus().equals("1") && (System.currentTimeMillis() - sysUser.getLockTime()) < lockedTime) {
                 sysUser.setPassword("1");
             }

+ 15 - 1
ui/src/views/sysManager/userManager/index.vue

@@ -113,6 +113,7 @@
             <vxe-table-column field="phonenumber" title="手机号码"/>
             <vxe-table-column field="status" title="用户状态" :formatter="statusFormat"/>
             <vxe-table-column field="usertype" title="用户类型" :formatter="typeFormat"/>
+            <vxe-table-column field="expDate" title="账号截止日期"/>
             <vxe-table-column title="操作" width="320">
               <template slot-scope="scope" v-if="scope.row.id !== 1">
                 <el-button
@@ -203,6 +204,18 @@
             </el-form-item>
           </el-col>
         </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="截止日期">
+              <el-date-picker
+                value-format="yyyy-MM-dd"
+                v-model="form.expDate"
+                type="date"
+                placeholder="请选择截止日期">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
@@ -425,7 +438,8 @@ export default {
         mailbox: undefined,
         status: "0",
         usertype: "0",
-        remark: undefined
+        remark: undefined,
+        expDate: undefined
       };
       this.resetForm("form");
     },