소스 검색

Merge remote-tracking branch 'origin/master'

谭斌 2 년 전
부모
커밋
55575d0334

+ 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 {
+
+    }
+
+}

+ 1 - 1
authorize-api-service/src/main/java/com/xy/entity/SysDept.java

@@ -47,7 +47,7 @@ public class SysDept extends BaseEntity2<SysDept> {
     private String code;
 
     /**
-     * 状态;1=启用 2=禁用
+     * 状态
      */
     private Integer status;
     /**

+ 2 - 2
authorize-api-service/src/main/java/com/xy/entity/SysMenu.java

@@ -56,8 +56,8 @@ public class SysMenu extends BaseEntity2<SysMenu> {
     private String webJson;
 
     /**
-     * 状态;1=启用 2=禁用
+     * 状态
      */
-    private Integer status;
+    private Boolean status;
 
 }

+ 4 - 4
authorize-api-service/src/main/java/com/xy/entity/SysRole.java

@@ -41,13 +41,13 @@ public class SysRole extends BaseEntity2<SysRole> {
     private String description;
 
     /**
-     * 状态;1=启用 2=禁用
+     * 状态
      */
-    private Integer status;
+    private Boolean status;
 
     /**
-     * 是否预留角色;1=是 2=否
+     * 是否预留角色
      */
-    private Integer isLeave;
+    private Boolean isLeave;
 
 }

+ 2 - 2
authorize-api-service/src/main/java/com/xy/entity/SysSystem.java

@@ -46,8 +46,8 @@ public class SysSystem extends BaseEntity2<SysSystem> {
     private Integer type2;
 
     /**
-     * 状态;1=启用 2=禁用
+     * 状态
      */
-    private Integer status;
+    private Boolean status;
 
 }

+ 9 - 16
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;
 
-    /**
-     * 状态;1=启用 2=禁用
-     */
-    private Integer status;
+    @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;
+
+}

+ 2 - 2
authorize-api-service/src/main/java/com/xy/entity/SysSystemValue.java

@@ -36,8 +36,8 @@ public class SysSystemValue extends BaseEntity2<SysSystemValue> {
     private String value;
 
     /**
-     * 状态;1=启用 2=禁用
+     * 状态
      */
-    private Integer status;
+    private Boolean status;
 
 }

+ 2 - 2
authorize-api-service/src/main/java/com/xy/entity/SysWorkUser.java

@@ -63,8 +63,8 @@ public class SysWorkUser extends BaseEntity2<SysWorkUser> {
     private Integer loginNum;
 
     /**
-     * 状态;状态 1=启用 2=禁用
+     * 状态
      */
-    private Integer status;
+    private Boolean status;
 
 }

+ 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> {
+}

+ 73 - 11
authorize-api-service/src/main/java/com/xy/service/impl/SysSystemUserServiceImpl.java

@@ -1,22 +1,23 @@
 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.github.yitter.idgen.YitIdHelper;
 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.SaTokenUtils;
+import com.xy.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.Data;
-import lombok.experimental.Accessors;
 import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.time.LocalDateTime;
+
 import static com.xy.utils.Beans.copy;
 
 /**
@@ -31,20 +32,81 @@ import static com.xy.utils.Beans.copy;
 @Api(tags = "权限用户接口")
 public class SysSystemUserServiceImpl extends ServiceImpl<SysSystemUserMapper, SysSystemUser> implements SysSystemUserService {
 
+    @Override
+    @ApiOperation("登录")
+    public R<String> login(SysSystemUserDto sysSystemUserDto) {
+        //校验账密
+        SysSystemUser sysSystemUser = getOne(new LambdaQueryWrapper<SysSystemUser>()
+                .eq(SysSystemUser::getAccount, sysSystemUserDto.getAccount())
+                .eq(SysSystemUser::getPassword, SecureUtil.md5(sysSystemUserDto.getPassword()))
+        );
+        if (sysSystemUser == null) {
+            return R.fail("账号或密码错误");
+        }
+        if (!sysSystemUser.getStatus()) {
+            return R.fail("账号已被封禁");
+        }
+        //生成token
+        StpUtil.login(sysSystemUser.getId());
+        //更新登录信息
+        SysSystemUserDto.UpdateDto updateDto = new SysSystemUserDto.UpdateDto()
+                .setIsLogin(true);
+        updateDto.setId(sysSystemUser.getId());
+        update(updateDto);
+        return R.ok(StpUtil.getTokenValue());
+    }
+
     @Override
     @ApiOperation("注册")
-    public R<Boolean> register(@RequestBody @Validated SysSystemUserDto sysSystemUserDto) {
-        Object loginId = SaTokenUtils.getId();
+    public R<Boolean> register(SysSystemUserDto sysSystemUserDto) {
+        //校验重复
         long count = count(new LambdaQueryWrapper<SysSystemUser>()
                 .eq(SysSystemUser::getAccount, sysSystemUserDto.getAccount())
-                .eq(SysSystemUser::getId, loginId)
         );
         if (count > 0) {
-            return R.fail("账户已存在");
+            return R.fail("账已存在");
         }
-        SysSystemUser sysSystemUser = copy(SysSystemUser.class, sysSystemUserDto).create(Long.parseLong(loginId.toString()));
+        //注册
+        SysSystemUser sysSystemUser = copy(SysSystemUser.class, sysSystemUserDto)
+                .setPassword(SecureUtil.md5(sysSystemUserDto.getPassword()))
+                .create(null);
         save(sysSystemUser);
         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();
+    }
+
 }

+ 5 - 2
authorize-api/src/main/java/com/xy/dto/SysSystemUserDto.java

@@ -6,18 +6,21 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Pattern;
 
 @Data
 @ApiModel("权限用户交互类")
 @Accessors(chain = true)
 public class SysSystemUserDto {
 
+    @ApiModelProperty(value = "账号", required = true)
     @NotBlank(message = "account不能为空")
-    @ApiModelProperty("账号")
+    @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "account必须为数字或字母,长度6-11位之间")
     private String account;
 
+    @ApiModelProperty(value = "密码", required = true)
     @NotBlank(message = "password不能为空")
-    @ApiModelProperty("密码")
+    @Pattern(regexp = "^[a-zA-z0-9]{6,11}$", message = "password必须为数字或字母,长度6-11位之间")
     private String password;
 
 }

+ 12 - 1
authorize-api/src/main/java/com/xy/service/SysSystemUserService.java

@@ -3,7 +3,9 @@ package com.xy.service;
 import com.xy.annotate.RestMappingController;
 import com.xy.dto.SysSystemUserDto;
 import com.xy.utils.R;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -16,6 +18,15 @@ import org.springframework.web.bind.annotation.PostMapping;
 @RestMappingController("sys-system-user")
 public interface SysSystemUserService {
 
+    /**
+     * 登录
+     *
+     * @param sysSystemUserDto
+     * @return
+     */
+    @PostMapping("login")
+    R<String> login(@RequestBody @Validated SysSystemUserDto sysSystemUserDto);
+
     /**
      * 注册
      *
@@ -23,5 +34,5 @@ public interface SysSystemUserService {
      * @return
      */
     @PostMapping("register")
-    R<Boolean> register(SysSystemUserDto sysSystemUserDto);
+    R<Boolean> register(@RequestBody @Validated SysSystemUserDto sysSystemUserDto);
 }

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

@@ -3,7 +3,6 @@ cloud:
   service:
     name: authorize
     ip: 119.96.213.127
-    port: 9052
 
 #雪花ID唯一标识
 workerId: 20

+ 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