李进 vor 2 Jahren
Ursprung
Commit
2d4bde2fbd

+ 54 - 0
authorize-api-service/src/main/java/com/xy/config/SaTokenInterceptorImpl.java

@@ -0,0 +1,54 @@
+package com.xy.config;
+
+import cn.dev33.satoken.stp.StpUtil;
+import com.xy.ServerWebConfig;
+import com.xy.enums.SaTokenEnum;
+import com.xy.error.CommRuntimeException;
+import com.xy.swagger.Knife4jConfig;
+import com.xy.utils.Emptys;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 权限系统权限拦截器
+ */
+@Component
+@AllArgsConstructor
+public class SaTokenInterceptorImpl extends HandlerInterceptorAdapter implements WebMvcConfigurer {
+
+    private SaTokenAuthorizeConfig saTokenAuthorizeConfig;
+
+    /**
+     * 方法执行前
+     */
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        String satoken = request.getHeader(saTokenAuthorizeConfig.getTokenName());
+        if (!Emptys.check(satoken)) {
+            throw new CommRuntimeException(SaTokenEnum.NO_LOGIN.getKey(), SaTokenEnum.NO_LOGIN.getName());
+        }
+        Object loginIdByToken = StpUtil.getLoginIdByToken(satoken);
+        if (loginIdByToken == null) {
+            throw new CommRuntimeException(SaTokenEnum.NO_LOGIN.getKey(), SaTokenEnum.NO_LOGIN.getName());
+        }
+        return true;
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        List<String> excludePaths = saTokenAuthorizeConfig.getExcludePaths();
+        excludePaths.addAll(Knife4jConfig.swaggerExcludes);
+        excludePaths.addAll(ServerWebConfig.serverWebExcludes);
+        registry.addInterceptor(this)
+                .excludePathPatterns(excludePaths)
+                .addPathPatterns("/**");
+    }
+
+}

+ 48 - 0
authorize-api-service/src/main/java/com/xy/dto/SysSystemUserDto.java

@@ -0,0 +1,48 @@
+package com.xy.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.entity.SysSystemUser;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDate;
+
+@Data
+@Accessors(chain = true)
+@ApiModel("权限用户交互类")
+public class SysSystemUserDto extends SysSystemUser {
+
+    @ApiModelProperty("分页对象")
+    private Page<SysSystemUser> page;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间-起")
+    private LocalDate beginCreateTime;
+
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(value = "创建时间-始")
+    private LocalDate endCreateTime;
+
+    @Data
+    @Accessors(chain = true)
+    @ApiModel("权限用户修改交互类")
+    public static class UpdateDto extends SysSystemUser {
+
+        @ApiModelProperty(value = "是否是登录", hidden = true)
+        private Boolean isLogin;
+
+        @ApiModelProperty(value = "是否是重置密码")
+        private Boolean isAgainPwd;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    @ApiModel("权限用户返参类")
+    public static class Vo extends SysSystemUser {
+
+    }
+
+}

+ 8 - 15
authorize-api-service/src/main/java/com/xy/entity/SysSystemUser.java

@@ -1,6 +1,8 @@
 package com.xy.entity;
 
 import com.xy.base.BaseEntity2;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -16,35 +18,26 @@ import java.time.LocalDateTime;
  * @since 2022-12-09
  */
 @Data
+@Api("权限用户")
 @Accessors(chain = true)
 @EqualsAndHashCode(callSuper = true)
 public class SysSystemUser extends BaseEntity2<SysSystemUser> {
 
     private static final long serialVersionUID = 1L;
 
-    /**
-     * 账号
-     */
+    @ApiModelProperty("账号")
     private String account;
 
-    /**
-     * 密码
-     */
+    @ApiModelProperty("密码")
     private String password;
 
-    /**
-     * 最后登录时间
-     */
+    @ApiModelProperty("最后登录时间")
     private LocalDateTime lastLoginTime;
 
-    /**
-     * 登录次数
-     */
+    @ApiModelProperty("登录次数")
     private Integer loginNum;
 
-    /**
-     * 状态
-     */
+    @ApiModelProperty("状态 true=启用 false=封禁")
     private Boolean status;
 
 }

+ 33 - 0
authorize-api-service/src/main/java/com/xy/entity/SysSystemUserRole.java

@@ -0,0 +1,33 @@
+package com.xy.entity;
+
+import com.xy.base.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 权限用户角色表
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-09
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = true)
+public class SysSystemUserRole extends BaseEntity<SysSystemUserRole> {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 权限户id
+     */
+    private Long systemUserId;
+
+    /**
+     * 角色id;多个,分隔
+     */
+    private String roleId;
+
+}

+ 15 - 0
authorize-api-service/src/main/java/com/xy/mapper/SysSystemUserRoleMapper.java

@@ -0,0 +1,15 @@
+package com.xy.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.entity.SysSystemUserRole;
+
+/**
+ * <p>
+ * 权限用户角色表 Mapper 接口
+ * </p>
+ *
+ * @author lijin
+ * @since 2022-12-09
+ */
+public interface SysSystemUserRoleMapper extends BaseMapper<SysSystemUserRole> {
+}

+ 43 - 6
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemUserServiceImpl.java

@@ -3,15 +3,18 @@ package com.xy.service.impl;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.crypto.SecureUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.SysSystemUserDto;
 import com.xy.entity.SysSystemUser;
 import com.xy.mapper.SysSystemUserMapper;
 import com.xy.service.SysSystemUserService;
-import com.xy.utils.R;
+import com.xy.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import java.time.LocalDateTime;
 
@@ -46,11 +49,10 @@ public class SysSystemUserServiceImpl extends ServiceImpl<SysSystemUserMapper, S
         //生成token
         StpUtil.login(sysSystemUser.getId());
         //更新登录信息
-        updateById(new SysSystemUser()
-                .setId(sysSystemUser.getId())
-                .setLastLoginTime(LocalDateTime.now())
-                .setLoginNum(sysSystemUser.getLoginNum() + 1)
-        );
+        SysSystemUserDto.UpdateDto updateDto = new SysSystemUserDto.UpdateDto()
+                .setIsLogin(true);
+        updateDto.setId(sysSystemUser.getId());
+        update(updateDto);
         return R.ok(StpUtil.getTokenValue());
     }
 
@@ -72,4 +74,39 @@ public class SysSystemUserServiceImpl extends ServiceImpl<SysSystemUserMapper, S
         return R.ok();
     }
 
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<IPage<SysSystemUserDto.Vo>> page(@RequestBody SysSystemUserDto sysSystemUserDto) {
+        LambdaQueryWrapper<SysSystemUser> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(sysSystemUserDto, SysSystemUser.class)
+                .ge(SysSystemUser::getCreateTime, sysSystemUserDto.getBeginCreateTime().atTime(0, 0, 0))
+                .le(SysSystemUser::getCreateTime, sysSystemUserDto.getEndCreateTime().atTime(23, 59, 59))
+                .build()
+                .select(SysSystemUser.class, info -> !info.getColumn().equals(LambdaUtils.getProperty(SysSystemUser::getPassword)));
+        IPage<SysSystemUser> page = page(sysSystemUserDto.getPage(), lambdaQueryWrapper);
+        IPage<SysSystemUserDto.Vo> result = PlusBeans.copy(SysSystemUserDto.Vo.class, page);
+        return R.ok(result);
+    }
+
+    @PostMapping("update")
+    @ApiOperation("修改")
+    public R<Boolean> update(@RequestBody SysSystemUserDto.UpdateDto updateDto) {
+        SysSystemUser sysSystemUser = new SysSystemUser()
+                .setId(updateDto.getId())
+                .setStatus(Emptys.check(updateDto.getStatus()) ? updateDto.getStatus() : null)
+                .setPassword(Emptys.check(updateDto.getIsAgainPwd()) && updateDto.getIsAgainPwd() ? "88888888" : null)
+                .setPassword(Emptys.check(updateDto.getPassword()) ? SecureUtil.md5(updateDto.getPassword()) : null);
+        //如果是登录则更新登录时间和次数
+        if (Emptys.check(updateDto.getIsLogin()) && updateDto.getIsLogin()) {
+            sysSystemUser.setLastLoginTime(LocalDateTime.now()).setLoginNum(getById(updateDto.getId()).getLoginNum() + 1);
+        } else {
+            sysSystemUser.update(Long.parseLong(SaTokenUtils.getId().toString()));
+        }
+        updateById(sysSystemUser);
+        //如果封禁账号则踢下线
+        if (Emptys.check(updateDto.getStatus()) && !updateDto.getStatus()) {
+            StpUtil.logout(SaTokenUtils.getId());
+        }
+        return R.ok();
+    }
+
 }

+ 24 - 1
authorize-start/src/main/resources/bootstrap.yml

@@ -10,10 +10,33 @@ cloud:
   center:
     url: 119.96.213.127:9007
     config:
-      shared-configs: redis.yaml,mysql.yaml,sa-token.yaml
+      shared-configs: redis.yaml,mysql.yaml
       name: authorize
   service:
     name: dev_authorize
 
+sa-token:
+  # token名称 (同时也是cookie名称)
+  token-name: satoken
+  # token有效期,单位s 默认30天, -1代表永不过期
+  timeout: 86400
+  # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒, -1代表永不过期
+  activity-timeout: 3600
+  # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
+  is-concurrent: true
+  # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
+  is-share: true
+  # token风格
+  token-style: random-64
+  # 是否输出操作日志
+  is-log: false
+  # 是否输出启动日志
+  isPrint: false
+  # 需要过滤的url
+  exclude-paths:
+    - /**/sys-system-user/login
+    - /**/sys-system-user/register
+    - /**/actuator/dynamic-tp
+
 logging:
   config: classpath:log4j2-spring.xml