Эх сурвалжийг харах

Merge branch 'master' of http://116.63.33.55/git/light-application

xyg 3 жил өмнө
parent
commit
1cfb17b44f
32 өөрчлөгдсөн 225 нэмэгдсэн , 41 устгасан
  1. 2 0
      light-application-server/src/main/java/com/jd/lightapplication/LightApplication.java
  2. 0 1
      light-application-server/src/main/java/com/jd/lightapplication/config/MybatisPlusConfig.java
  3. 37 2
      light-application-server/src/main/java/com/jd/lightapplication/controller/AuthController.java
  4. 4 1
      light-application-server/src/main/java/com/jd/lightapplication/controller/SysMenuController.java
  5. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/controller/SysRoleController.java
  6. 12 0
      light-application-server/src/main/java/com/jd/lightapplication/controller/SysUserController.java
  7. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/CrowdInfo.java
  8. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/CrowdUser.java
  9. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/InspectionProject.java
  10. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/InspectionRecord.java
  11. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/InspectionResult.java
  12. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/InspectionTemplate.java
  13. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/InspectionTemplateProject.java
  14. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/MeetingArrange.java
  15. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/MeetingInfo.java
  16. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/MeetingPersonnel.java
  17. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/MessageRecord.java
  18. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/NoticeInfo.java
  19. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/SysMenu.java
  20. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/SysRole.java
  21. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/SysRoleMenu.java
  22. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/SysUser.java
  23. 3 1
      light-application-server/src/main/java/com/jd/lightapplication/model/SysUserRole.java
  24. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/model/UploadRecord.java
  25. 18 0
      light-application-server/src/main/java/com/jd/lightapplication/model/dto/SysUserUpdateDto.java
  26. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/security/JwtAuthenticationFilter.java
  27. 6 1
      light-application-server/src/main/java/com/jd/lightapplication/security/MobileAuthenticationFilter.java
  28. 113 11
      light-application-server/src/main/java/com/jd/lightapplication/security/MobileLoginFilter.java
  29. 2 2
      light-application-server/src/main/java/com/jd/lightapplication/service/MeetingInfoService.java
  30. 4 2
      light-application-server/src/main/java/com/jd/lightapplication/service/SysMenuService.java
  31. 4 0
      light-application-server/src/main/java/com/jd/lightapplication/service/SysUserService.java
  32. 1 1
      light-application-server/src/main/java/com/jd/lightapplication/weChat/WeChatController.java

+ 2 - 0
light-application-server/src/main/java/com/jd/lightapplication/LightApplication.java

@@ -1,5 +1,6 @@
 package com.jd.lightapplication;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@@ -11,6 +12,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
  * @Version 1.0
  */
 @SpringBootApplication
+@MapperScan("com.jd.lightapplication.mapper")
 public class LightApplication {
 
     public static void main(String[] args) {

+ 0 - 1
light-application-server/src/main/java/com/jd/lightapplication/config/MybatisPlusConfig.java

@@ -17,7 +17,6 @@ import org.springframework.context.annotation.Configuration;
  */
 
 @Configuration
-@MapperScan("com.jd.lightapplication.mapper")
 public class MybatisPlusConfig {
 
     @Bean

+ 37 - 2
light-application-server/src/main/java/com/jd/lightapplication/controller/AuthController.java

@@ -1,21 +1,26 @@
 package com.jd.lightapplication.controller;
 
 import cn.hutool.core.map.MapUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.google.code.kaptcha.Producer;
 import com.jd.lightapplication.common.lang.Const;
 import com.jd.lightapplication.common.lang.R;
+import com.jd.lightapplication.model.SysRole;
 import com.jd.lightapplication.model.SysUser;
+import com.jd.lightapplication.service.SysRoleService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.RestController;
 import sun.misc.BASE64Encoder;
 
+import javax.annotation.Resource;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.security.Principal;
+import java.util.List;
 import java.util.UUID;
 
 /**
@@ -32,6 +37,9 @@ public class AuthController extends BaseController {
     @Autowired
     Producer producer;
 
+    @Resource
+    private SysRoleService sysRoleService;
+
     @GetMapping("/captcha")
     public R captcha() throws IOException {
         String key = UUID.randomUUID().toString();
@@ -69,14 +77,41 @@ public class AuthController extends BaseController {
     @GetMapping("/sys/userInfo")
     public R userInfo(Principal principal) {
 
-        SysUser sysUser = sysUserService.getByUsername(principal.getName());
+        //SysUser sysUser = sysUserService.getByUsername(principal.getName());
+        SysUser sysUser = (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
 
         return R.success(MapUtil.builder()
                 .put("id", sysUser.getId())
                 .put("username", sysUser.getUsername())
+                .put("usernameShow", sysUser.getUsernameShow())
                 .put("avatar", sysUser.getAvatar())
                 .put("created", sysUser.getCreated())
                 .map()
         );
     }
+
+    /**
+     * 获取用户信息和角色接口
+     *
+     * @return
+     */
+    @GetMapping("/sys/userInfoAndRole")
+    public R userInfoAndRole() {
+        //从SecurityContextHolder里面取认证信息强转成SysUser实体类,这个实体是在权限认证成功后放入到SecurityContextHolder的
+        SysUser sysUser = (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        //获取用户权限
+        List<SysRole> roleList = sysRoleService.list(
+                Wrappers.lambdaQuery(new SysRole())
+                        .inSql(SysRole::getId,"SELECT role_id FROM sys_user_role WHERE user_id = " + sysUser.getId())
+        );
+        return R.success(MapUtil.builder()
+                .put("id", sysUser.getId())
+                .put("usernameShow", sysUser.getUsernameShow())
+                .put("nickName",sysUser.getNickName())
+                .put("headImgUrl",sysUser.getHeadImgUrl())
+                .put("created", sysUser.getCreated())
+                .put("roleList",roleList)
+                .map()
+        );
+    }
 }

+ 4 - 1
light-application-server/src/main/java/com/jd/lightapplication/controller/SysMenuController.java

@@ -9,6 +9,8 @@ import com.jd.lightapplication.model.SysMenu;
 import com.jd.lightapplication.model.SysRoleMenu;
 import com.jd.lightapplication.model.SysUser;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.util.StringUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -36,7 +38,8 @@ public class SysMenuController extends BaseController {
      */
     @GetMapping("/nav")
     public R nav(Principal principal) {
-        SysUser sysUser = sysUserService.getByUsername(principal.getName());
+        //SysUser sysUser = sysUserService.getByUsername(principal.getName());
+        SysUser sysUser = (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
 
         // 获取权限信息
         String authorityInfo = sysUserService.getUserAuthorityInfo(sysUser.getId());

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/controller/SysRoleController.java

@@ -63,7 +63,7 @@ public class SysRoleController extends BaseController {
     public R save(@Validated @RequestBody SysRole sysRole) {
 
         sysRole.setCreated(LocalDateTime.now());
-        sysRole.setStatu(Const.STATUS_ON);
+        //sysRole.setStatu(Const.STATUS_ON);
 
         sysRoleService.save(sysRole);
         return R.success(sysRole);

+ 12 - 0
light-application-server/src/main/java/com/jd/lightapplication/controller/SysUserController.java

@@ -1,6 +1,7 @@
 package com.jd.lightapplication.controller;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -13,6 +14,7 @@ import com.jd.lightapplication.model.SysRole;
 import com.jd.lightapplication.model.SysUser;
 import com.jd.lightapplication.model.SysUserRole;
 import com.jd.lightapplication.model.dto.SysUserQueryDto;
+import com.jd.lightapplication.model.dto.SysUserUpdateDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -181,4 +183,14 @@ public class SysUserController extends BaseController {
         wrapper.isNull(SysUser::getPassword);
         return R.success(sysUserService.page(page, wrapper));
     }
+
+    @PostMapping("/updateNoAuth")
+    public R updateNoAuth(@RequestBody SysUserUpdateDto sysUserUpdateDto) {
+        SysUser sysUser = new SysUser();
+        BeanUtil.copyProperties(sysUserUpdateDto, sysUser);
+        sysUser.setUpdated(DateUtil.now());
+        sysUserService.updateById(sysUser);
+        return R.success(sysUser);
+    }
+
 }

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/CrowdInfo.java

@@ -21,7 +21,7 @@ import lombok.experimental.Accessors;
 public class CrowdInfo implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("群聊名称")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/CrowdUser.java

@@ -19,7 +19,7 @@ import lombok.Data;
 public class CrowdUser implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("群聊id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/InspectionProject.java

@@ -22,7 +22,7 @@ import lombok.experimental.Accessors;
 public class InspectionProject implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("巡检项目名称")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/InspectionRecord.java

@@ -21,7 +21,7 @@ import lombok.experimental.Accessors;
 public class InspectionRecord implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("关联会议id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/InspectionResult.java

@@ -19,7 +19,7 @@ import java.io.Serializable;
 public class InspectionResult implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("关联巡检记录id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/InspectionTemplate.java

@@ -21,7 +21,7 @@ import lombok.experimental.Accessors;
 public class InspectionTemplate implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("模板名称")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/InspectionTemplateProject.java

@@ -21,7 +21,7 @@ import lombok.experimental.Accessors;
 public class InspectionTemplateProject implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("关联模板id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/MeetingArrange.java

@@ -19,7 +19,7 @@ import lombok.Data;
 public class MeetingArrange implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("会议id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/MeetingInfo.java

@@ -21,7 +21,7 @@ import lombok.experimental.Accessors;
 public class MeetingInfo implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("会议标题")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/MeetingPersonnel.java

@@ -19,7 +19,7 @@ import lombok.Data;
 public class MeetingPersonnel implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("会议id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/MessageRecord.java

@@ -19,7 +19,7 @@ import lombok.Data;
 public class MessageRecord implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("发送方用户id")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/NoticeInfo.java

@@ -21,7 +21,7 @@ import lombok.experimental.Accessors;
 public class NoticeInfo implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("公告标题")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/SysMenu.java

@@ -20,7 +20,7 @@ import java.util.List;
 public class SysMenu implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("父菜单ID,一级菜单为0")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/SysRole.java

@@ -20,7 +20,7 @@ import java.util.List;
 public class SysRole implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("角色名称")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/SysRoleMenu.java

@@ -17,7 +17,7 @@ import java.io.Serializable;
 public class SysRoleMenu implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/SysUser.java

@@ -22,7 +22,7 @@ import java.util.List;
 public class SysUser implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("用户名称(登录账号)")

+ 3 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/SysUserRole.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 
@@ -14,10 +15,11 @@ import java.io.Serializable;
 @Data
 @ApiModel("用户&角色关联表")
 @TableName("sys_user_role")
+@Accessors(chain = true)
 public class SysUserRole implements Serializable {
 	private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("")

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/model/UploadRecord.java

@@ -19,7 +19,7 @@ import java.io.Serializable;
 public class UploadRecord implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    @TableId(value = "id", type = IdType.INPUT)
+    @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
     @ApiModelProperty("关联巡检结果id,如果为空表示是图片回传")

+ 18 - 0
light-application-server/src/main/java/com/jd/lightapplication/model/dto/SysUserUpdateDto.java

@@ -0,0 +1,18 @@
+package com.jd.lightapplication.model.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class SysUserUpdateDto {
+    private Long id;
+
+    @ApiModelProperty("用户名称(显示名称)")
+    private String usernameShow;
+
+    @ApiModelProperty("普通用户昵称")
+    private String nickName;
+
+    @ApiModelProperty("用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表640*640正方形头像),用户没有头像时该项为空")
+    private String headImgUrl;
+}

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/security/JwtAuthenticationFilter.java

@@ -65,7 +65,7 @@ public class JwtAuthenticationFilter extends BasicAuthenticationFilter {
 
         SysUser sysUser = sysUserService.getById(userId);
 
-        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(sysUser.getUsername(), null, userDetailService.getUserAuthority(sysUser.getId()));
+        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(sysUser, null, userDetailService.getUserAuthority(sysUser.getId()));
 
         SecurityContextHolder.getContext().setAuthentication(token);
 

+ 6 - 1
light-application-server/src/main/java/com/jd/lightapplication/security/MobileAuthenticationFilter.java

@@ -1,5 +1,6 @@
 package com.jd.lightapplication.security;
 
+import cn.hutool.core.util.StrUtil;
 import org.springframework.security.authentication.AuthenticationServiceException;
 import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
@@ -47,7 +48,11 @@ public class MobileAuthenticationFilter extends AbstractAuthenticationProcessing
      * @return
      */
     protected String obtainMobile(HttpServletRequest request) {
-        return request.getParameter(this.mobileParameter);
+        String phone = request.getParameter(this.mobileParameter);
+        if(StrUtil.isBlank(phone)){
+            phone = request.getAttribute(this.mobileParameter).toString();
+        }
+        return phone;
     }
     //将请求信息也放入到Token中。
     protected void setDetails(HttpServletRequest request, MobileAuthenticationToken authRequest) {

+ 113 - 11
light-application-server/src/main/java/com/jd/lightapplication/security/MobileLoginFilter.java

@@ -1,10 +1,22 @@
 package com.jd.lightapplication.security;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.jd.lightapplication.common.exception.CaptchaException;
+import com.jd.lightapplication.common.lang.WeChatConfig;
+import com.jd.lightapplication.model.SysRole;
+import com.jd.lightapplication.model.SysUser;
+import com.jd.lightapplication.model.SysUserRole;
+import com.jd.lightapplication.service.SysRoleService;
+import com.jd.lightapplication.service.SysUserRoleService;
+import com.jd.lightapplication.service.SysUserService;
 import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.boot.autoconfigure.security.SecurityProperties;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -18,19 +30,30 @@ import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
 
 @Data
 @AllArgsConstructor
 @Component
+@Slf4j
 public class MobileLoginFilter extends OncePerRequestFilter implements InitializingBean {
+
+    private SysUserService sysUserService;
+    private SysRoleService sysRoleService;
+    private SysUserRoleService sysUserRoleService;
+
     LoginFailureHandler loginFailureHandler;
     private SecurityProperties securityProperties;
     private AuthenticationFailureHandler authenticationFailureHandler;
     private RedisTemplate redisTemplate;
 
+    private final String CAPTCHA = "CAPTCHA";
+    private final String QUICK = "QUICK";
+
+    private WeChatConfig weChatConfig;
+
+    private final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
+    private final String PHONE_URL = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=%s";
+
     @Override
     protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException, ServletException, IOException {
 
@@ -57,21 +80,100 @@ public class MobileLoginFilter extends OncePerRequestFilter implements Initializ
 
         String phone = request.getParameter("phone");
         String code = request.getParameter("code");
+        String type = request.getParameter("type");
 
-        if (StringUtils.isBlank(phone) || StringUtils.isBlank(code)) {
-            throw new CaptchaException("验证码错误");
+        if (QUICK.equals(type)) {//表示手机快捷登录 用code去微信服务器换取手机号
+            phone = this.getPhone(code);
+            //快捷登录没有手机号信息,需要把手机号存到request里面。让后面的过滤器能取到手机号
+            request.setAttribute("phone", phone);
+        } else if (CAPTCHA.equals(type)) {//表示手机验证码登录
+            Object redisCode = redisTemplate.opsForValue().get(phone);
+            if (StringUtils.isBlank(phone) || StringUtils.isBlank(code) || redisCode == null || !code.equals(redisCode.toString())) {
+                throw new CaptchaException("验证码错误");
+            }
         }
 
-        Object redisCode = redisTemplate.opsForValue().get(phone);
-
-        if (redisCode == null || !code.equals(redisCode.toString())) {
-            throw new CaptchaException("验证码错误");
-        }
+        this.handlePhone(phone);
 
         //把验证码从redis里面移除  让验证码失效
         // TODO: 2022/4/19
         //redisTemplate.delete(phone);
     }
+
+    /**
+     * 处理手机号 如果用户表存在phone则不做处理,如果不存在phone则新增用户信息默认角色为来宾
+     *
+     * @param phone
+     */
+    private void handlePhone(String phone) {
+        SysUser sysUser = sysUserService.getByPhone(phone);
+        if (sysUser != null) {
+            return;
+        }
+        //先添加用户信息
+        sysUser = new SysUser()
+                .setPhone(phone)
+                .setStatu(1)//表示可用
+                .setCreated(DateUtil.now());
+        Boolean result = sysUserService.save(sysUser);
+        //再添加用户角色
+        LambdaQueryWrapper<SysRole> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysRole::getCode, "GUEST");
+        SysRole sysRole = sysRoleService.getOne(wrapper);
+        SysUserRole sysUserRole = new SysUserRole()
+                .setRoleId(sysRole.getId())
+                .setUserId(sysUser.getId());
+        Boolean result1 = sysUserRoleService.save(sysUserRole);
+
+        if (!(result && result1)) {
+            throw new CaptchaException("系统异常,请联系管理员!");
+        }
+        log.debug("手机号登录未找到用户信息," + (result ? "新增用户成功。" : "新增用户失败。") + "phone=" + phone);
+        log.debug("手机号登录未找到用户信息," + (result1 ? "新增角色成功。" : "新增角色失败。") + "phone=" + phone);
+    }
+
+    /**
+     * 根据小程序拿到的动态令牌获取用户手机号
+     * @param code
+     * @return
+     */
+    public String getPhone(String code) {
+        //先获取accessToken
+        String accessToken = this.getAccessToken();
+        //拿accessToken和动态令牌去微信获取用户手机号信息
+        JSONObject jsonObject = JSONUtil.createObj();
+        jsonObject.set("code", code);
+        String phoneUrl = String.format(PHONE_URL, accessToken);
+        String phoneResult = HttpUtil.createPost(phoneUrl)
+                .header("Content-Type", "application/json")
+                .body(jsonObject.toString())
+                .execute()
+                .body();
+        JSONObject result = JSONUtil.parseObj(phoneResult);
+        if (!"ok".equals(result.get("errmsg"))) {
+            return null;
+        }
+        JSONObject phoneInfo = result.getJSONObject("phone_info");
+        return phoneInfo.getStr("phoneNumber");
+    }
+
+    /**
+     * 获取accessToken
+     *
+     * @return
+     */
+    private String getAccessToken() {
+        //拼接access_token请求地址
+        String accessTokenUrl = String.format(ACCESS_TOKEN_URL, weChatConfig.getAppId(), weChatConfig.getAppSecret());
+        //先获取access_token
+        String accessTokenResult = HttpUtil.createGet(accessTokenUrl)
+                .execute()
+                .charset("UTF-8")
+                .body();
+        JSONObject result = JSONUtil.parseObj(accessTokenResult);
+        String accessToken = result.get("access_token").toString();
+        return accessToken;
+    }
 }
 
 

+ 2 - 2
light-application-server/src/main/java/com/jd/lightapplication/service/MeetingInfoService.java

@@ -27,8 +27,8 @@ public class MeetingInfoService extends ServiceImpl<MeetingInfoMapper, MeetingIn
         if (StrUtil.isNotBlank(meetingInfoQueryDto.getTitle())) {
             wrapper.like(MeetingInfo::getTitle, meetingInfoQueryDto.getTitle());
         }
-        wrapper.orderByDesc(MeetingInfo::getCreateTime)
-                .orderByDesc(MeetingInfo::getStatus);
+        wrapper.orderByAsc(MeetingInfo::getStatus)
+                .orderByDesc(MeetingInfo::getCreateTime);
         return this.page(page, wrapper);
     }
 

+ 4 - 2
light-application-server/src/main/java/com/jd/lightapplication/service/SysMenuService.java

@@ -9,6 +9,7 @@ import com.jd.lightapplication.model.SysUser;
 import com.jd.lightapplication.mapper.SysMenuMapper;
 import com.jd.lightapplication.mapper.SysUserMapper;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 
@@ -35,8 +36,9 @@ public class SysMenuService extends ServiceImpl<SysMenuMapper, SysMenu> {
     SysUserMapper sysUserMapper;
 
     public List<SysMenuDto> getCurrentUserNav() {
-        String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
-        SysUser sysUser = sysUserService.getByUsername(username);
+        //String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        //SysUser sysUser = sysUserService.getByUsername(username);
+        SysUser sysUser = (SysUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
         List<Long> menuIds = sysUserMapper.getNavMenuIds(sysUser.getId());
         List<SysMenu> menuList = menuIds.size() > 0 ? this.listByIds(menuIds).stream().filter(t -> {
             return t.getType() != 2;

+ 4 - 0
light-application-server/src/main/java/com/jd/lightapplication/service/SysUserService.java

@@ -1,5 +1,6 @@
 package com.jd.lightapplication.service;
 
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -70,6 +71,9 @@ public class SysUserService extends ServiceImpl<SysUserMapper, SysUser> {
     }
 
     public void clearUserAuthorityInfo(String username) {
+        if(StrUtil.isBlank(username)){
+            return;
+        }
         redisUtil.del("GrantedAuthority:", username);
     }
 

+ 1 - 1
light-application-server/src/main/java/com/jd/lightapplication/weChat/WeChatController.java

@@ -38,7 +38,7 @@ public class WeChatController {
                 .body(jsonObject.toString())
                 .execute()
                 .body();
-        return R.success(phoneResult);
+        return R.success(JSONUtil.parse(phoneResult));
     }
 
     /**