diff --git a/src/main/java/com/qs/serve/common/config/SpringMvcConfig.java b/src/main/java/com/qs/serve/common/config/SpringMvcConfig.java index a08f1bbd..20f19075 100644 --- a/src/main/java/com/qs/serve/common/config/SpringMvcConfig.java +++ b/src/main/java/com/qs/serve/common/config/SpringMvcConfig.java @@ -1,6 +1,5 @@ package com.qs.serve.common.config; -import com.qs.serve.common.framework.interceptor.ApiAuthInterceptor; import com.qs.serve.common.framework.interceptor.LimitSubmitInterceptor; import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; @@ -22,14 +21,14 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; public class SpringMvcConfig implements WebMvcConfigurer { private final LimitSubmitInterceptor limitSubmitInterceptor; - private final ApiAuthInterceptor apiAuthInterceptor; + //private final ApiAuthInterceptor apiAuthInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { //注册LimitSubmitInterceptor拦截器 - registry.addInterceptor(apiAuthInterceptor) - .addPathPatterns("/api/**") - .excludePathPatterns("/api/wx/login/*","/api/dev/**"); +// registry.addInterceptor(apiAuthInterceptor) +// .addPathPatterns("/api/**") +// .excludePathPatterns("/api/wx/login/*","/api/dev/**"); registry.addInterceptor(limitSubmitInterceptor) .addPathPatterns("/**"); } diff --git a/src/main/java/com/qs/serve/common/framework/interceptor/ApiAuthInterceptor.java b/src/main/java/com/qs/serve/common/framework/interceptor/ApiAuthInterceptor.java deleted file mode 100644 index da03d8ea..00000000 --- a/src/main/java/com/qs/serve/common/framework/interceptor/ApiAuthInterceptor.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.qs.serve.common.framework.interceptor; - -import com.qs.serve.common.framework.redis.RedisService; -import com.qs.serve.common.framework.security.model.LoginUser; -import com.qs.serve.common.framework.security.model.LoginUserDTO; -import com.qs.serve.common.model.consts.GySysConst; -import com.qs.serve.common.model.consts.RedisCacheKeys; -import com.qs.serve.common.util.JsonUtil; -import com.qs.serve.common.util.StringUtils; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Objects; - -/** - * API接口身份拦截器 - * @author YenHex - */ -@Configuration(proxyBeanMethods = false) -public class ApiAuthInterceptor implements HandlerInterceptor { - - - @Resource private RedisService redisService; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - String token = request.getHeader(GySysConst.APP_TOKEN_PROP); - String loginUserJson = redisService.getString(RedisCacheKeys.LOGIN_KEY_WX+token); - if(loginUserJson!=null){ - LoginUser loginUser = Objects.requireNonNull(JsonUtil.jsonToPojo(loginUserJson, LoginUserDTO.class)).loginUser(); - String wxLoginKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_WXUSER,loginUser.getUserId()); - String sysUserId = redisService.getString(wxLoginKey); - if(sysUserId!=null){ - UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); - authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - SecurityContextHolder.getContext().setAuthentication(authentication); - return true; - } - } - try { - response.setHeader("Access-Control-Allow-Origin", "*"); - response.setHeader("Access-Control-Allow-Credentials", "true"); - response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS"); - response.setHeader("Access-Control-Max-Age", "86400"); - response.setHeader("Access-Control-Allow-Headers", "*"); - response.setStatus(200); - response.setCharacterEncoding("UTF-8"); - response.setCharacterEncoding("UTF-8"); - response.setContentType("application/json;charset=UTF-8"); - response.getWriter().print("{\"status\":401,\"msg\":\"用户信息无效或过期了\"}"); - response.getWriter().flush(); - } catch (IOException e) { - e.printStackTrace(); - } - return false; - } - -} diff --git a/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java b/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java index 63ab9c0f..1c4e1480 100644 --- a/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java +++ b/src/main/java/com/qs/serve/common/framework/security/filter/SecurityRequestFilter.java @@ -57,19 +57,6 @@ public class SecurityRequestFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { - String appToken = request.getHeader(GySysConst.APP_TOKEN_PROP); - String loginUserJson = redisService.getString(RedisCacheKeys.LOGIN_KEY_WX+appToken); - if(loginUserJson!=null){ - LoginUser loginUser = Objects.requireNonNull(JsonUtil.jsonToPojo(loginUserJson, LoginUserDTO.class)).loginUser(); - String wxLoginKey = com.qs.serve.common.util.StringUtils.format(RedisCacheKeys.LOGIN_KEY_WXUSER,loginUser.getUserId()); - String sysUserId = redisService.getString(wxLoginKey); - if(sysUserId==null){ - HttpResponsePrintUtil.print2(response,401,"账号绑定更新,已被系统登出"); - return; - } - } - - String supplierId = request.getHeader(GySysConst.SUPPLIER_PROP); AuthContextUtils.setSupplierId(supplierId); //移除前缀 diff --git a/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java b/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java index e99b9dd0..ebeba580 100644 --- a/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java +++ b/src/main/java/com/qs/serve/common/model/consts/RedisCacheKeys.java @@ -6,27 +6,18 @@ package com.qs.serve.common.model.consts; */ public class RedisCacheKeys { - /** 权限列表 */ - public final static String PERMIT_ALL_LIST = "expire_permit_list"; - /** 租户列表 */ public final static String Tenant_ALL_LIST = "expire_tenant_list"; - /** 管理员登录key */ - public final static String LOGIN_KEY_ADMIN = "login_admin_:"; - - /** 家长登录key */ - public final static String LOGIN_KEY_WX = "login_wx_:"; - public final static String LOGIN_KEY_WXUSER= "login_wx_usr:{}"; /** 用户登录APP {}客户端 {}用户ID */ public final static String LOGIN_KEY_APP = "login_app_{}:{}:"; + /** 微信用户ID */ + public final static String WX_KEY_USER = "wx_usr_id:{}:"; + /** 手机号验证吗 */ public final static String PHONE_KEY = "phone_code_:"; - /** 工号标识 */ - public final static String SYS_USER_CODE_KEY = "sys_user_code_:"; - } diff --git a/src/main/java/com/qs/serve/common/util/AuthContextUtils.java b/src/main/java/com/qs/serve/common/util/AuthContextUtils.java index 50dd3737..477dd42d 100644 --- a/src/main/java/com/qs/serve/common/util/AuthContextUtils.java +++ b/src/main/java/com/qs/serve/common/util/AuthContextUtils.java @@ -65,11 +65,11 @@ public class AuthContextUtils { */ public static String getSysUserId(){ LoginUser loginUser = getLoginUser(); - if(loginUser.getTypeFlag().equals(LoginUserType.SYS_SUP_USER) - ||loginUser.getTypeFlag().equals(LoginUserType.SYS_USER)){ - return loginUser.getUserId(); - } - return null; +// if(loginUser.getTypeFlag().equals(LoginUserType.SYS_SUP_USER) +// ||loginUser.getTypeFlag().equals(LoginUserType.SYS_USER)){ +// return loginUser.getUserId(); +// } + return loginUser.getUserId(); } /** diff --git a/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java b/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java index 99732e05..76251e17 100644 --- a/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java +++ b/src/main/java/com/qs/serve/controller/WxSvcLoginApi.java @@ -66,31 +66,26 @@ public class WxSvcLoginApi { Assert.throwEx(HttpCode.WX_ERR); } String token = IdUtil.fastSimpleUUID(); - String key = RedisCacheKeys.LOGIN_KEY_WX + token; LoginUser loginUser = new LoginUser(wxUser.getId(),wxUser.getEmpName(),"", ServletUtils.getIp(request), LoginUserType.APP_USER,new ArrayList<>(),null,AuthContextUtils.getTenant()); - redisService.set(key, JsonUtil.objectToJson(loginUser.loginUserDTO()),2, TimeUnit.DAYS); objectMap.put("token",token); - - String wxLoginKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_WXUSER,wxUser.getId()); - redisService.set(wxLoginKey,wxUser.getSysUserId(),2, TimeUnit.DAYS); - + //微信登录ID + String wxUserKey = StringUtils.format(RedisCacheKeys.WX_KEY_USER,token); + redisService.set(wxUserKey,wxUser.getId()); //后台管理员信息 - //if(StringUtils.hasText(wxUser.getSysUserId())){ - Map tokenMap = new HashMap<>(10); - String client = "wx_app"; - String redisKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_APP,client,wxUser.getSysUserId()); - String pctoken = JwtUtils.generateToken(wxUser.getSysUserId(),loginUser.getTypeFlag(),client); - redisService.set(redisKey,pctoken); - tokenMap.put("token", pctoken); - tokenMap.put("userId", wxUser.getSysUserId()); - tokenMap.put("IP", loginUser.getLoginIp()); - tokenMap.put("tenant", sysTenantMapper.selectById(loginUser.getTenant())); - tokenMap.put("loginType",client); - tokenMap.put("client",client); - //关联 - objectMap.put("adminTokenInfo",tokenMap); - //} + Map tokenMap = new HashMap<>(10); + String client = "wx_app"; + String redisKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_APP,client,wxUser.getSysUserId()); + String pctoken = JwtUtils.generateToken(wxUser.getSysUserId(),loginUser.getTypeFlag(),client); + redisService.set(redisKey,pctoken); + tokenMap.put("token", pctoken); + tokenMap.put("userId", wxUser.getSysUserId()); + tokenMap.put("IP", loginUser.getLoginIp()); + tokenMap.put("tenant", sysTenantMapper.selectById(loginUser.getTenant())); + tokenMap.put("loginType",client); + tokenMap.put("client",client); + //关联 + objectMap.put("adminTokenInfo",tokenMap); return R.ok(objectMap); } @@ -100,19 +95,15 @@ public class WxSvcLoginApi { @PostMapping("/mptest") public R login(HttpServletRequest request){ Map objectMap = new HashMap<>(); - String token = TokenUtil.desEncrypt(IdUtil.timeStampId()); - String key = RedisCacheKeys.LOGIN_KEY_WX + token; + String token = IdUtil.fastSimpleUUID(); + //微信登录ID + String wxUserKey = StringUtils.format(RedisCacheKeys.WX_KEY_USER,token); + redisService.set(wxUserKey,"1"); + LoginUser loginUser = new LoginUser("1","微信测试用户","", ServletUtils.getIp(request), LoginUserType.APP_USER,new ArrayList<>(),null,AuthContextUtils.getTenant()); - redisService.set(key, JsonUtil.objectToJson(loginUser.loginUserDTO()),2, TimeUnit.DAYS); objectMap.put("token",token); - String sysUserId = "1"; - String wxLoginKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_WXUSER,sysUserId); - redisService.set(wxLoginKey,sysUserId,2, TimeUnit.DAYS); - - - Map tokenMap = new HashMap<>(10); String client = "wx_app"; String redisKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_APP,client,sysUserId); @@ -126,7 +117,6 @@ public class WxSvcLoginApi { tokenMap.put("client",client); //关联 objectMap.put("adminTokenInfo",tokenMap); - return R.ok(objectMap); } diff --git a/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserLoginServiceImpl.java b/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserLoginServiceImpl.java index 4f9c03b7..86fb6012 100644 --- a/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserLoginServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/sys/service/impl/SysUserLoginServiceImpl.java @@ -109,25 +109,7 @@ public class SysUserLoginServiceImpl implements SysUserLoginService { tokenMap.put("loginType",loginType); tokenMap.put("client",client); //拓展微信token - String wxtoken = IdUtil.fastSimpleUUID(); - String key = RedisCacheKeys.LOGIN_KEY_WX + wxtoken; - LambdaQueryWrapper wxUsrLqw = new LambdaQueryWrapper<>(); - wxUsrLqw.eq(WxUser::getSysUserId,loginUser.getUserId()); - wxUsrLqw.eq(WxUser::getSysUserId,loginUser.getUserId()); - WxUser wxUser = null; - try { - wxUser = wxUserMapper.selectOne(wxUsrLqw); - } catch (Exception e) { - e.printStackTrace(); - } - if(wxUser!=null){ - LoginUser wxloginUser = new LoginUser(wxUser.getId(),wxUser.getEmpName(),"", - "", LoginUserType.APP_USER,new ArrayList<>(),null,AuthContextUtils.getTenant()); - redisService.set(key, JsonUtil.objectToJson(wxloginUser.loginUserDTO()),2, TimeUnit.DAYS); - tokenMap.put("wxToken",token); - }else { - tokenMap.put("wxToken","notBindWx"); - } + tokenMap.put("wxToken",""); return tokenMap; } diff --git a/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java b/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java index 4346f1bf..96173a23 100644 --- a/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java +++ b/src/main/java/com/qs/serve/modules/wx/api/WxSvcUserApi.java @@ -43,7 +43,7 @@ public class WxSvcUserApi { */ @GetMapping("/info") public R info(){ - WxUser wxUser = wxUserService.getCurrentWxUser(false,true); + WxUser wxUser = wxUserService.getCurrentWxUser(true); return R.ok(wxUser); } diff --git a/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java b/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java index a296e2ee..25eed2b8 100644 --- a/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java +++ b/src/main/java/com/qs/serve/modules/wx/controller/WxUserController.java @@ -140,8 +140,9 @@ public class WxUserController { wxUserService.updateById(wxUser); } } - String wxLoginKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_WXUSER,wxUserId); - redisService.remove(wxLoginKey); + String client = "wx_app"; + String redisKey = StringUtils.format(RedisCacheKeys.LOGIN_KEY_APP,client,sysUserId); + redisService.remove(redisKey); return R.ok(); } diff --git a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java index d9d5a934..8336e165 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java +++ b/src/main/java/com/qs/serve/modules/wx/service/WxUserService.java @@ -14,19 +14,18 @@ import java.util.List; public interface WxUserService extends IService { WxUser getCurrentWxUser(); - WxUser getCurrentWxUser(boolean filterZero); /** - * 获取当前微信用户 - * @param filterZero + * 获取当前微信用 * @param updateSub * @return */ - WxUser getCurrentWxUser(boolean filterZero,boolean updateSub); + WxUser getCurrentWxUser(boolean updateSub); void syncSubscribe(); List getByUnionId(String unionId); List getBySysUserId(String userId); + WxUser getByCurrSysUserId(String userId); List getBySysUserIds(List userIds); /** diff --git a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java index 0229a720..53db9ba6 100644 --- a/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/wx/service/impl/WxUserServiceImpl.java @@ -2,12 +2,16 @@ package com.qs.serve.modules.wx.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.framework.redis.RedisService; import com.qs.serve.common.framework.security.model.LoginUser; import com.qs.serve.common.framework.security.model.LoginUserType; import com.qs.serve.common.model.consts.GySysConst; +import com.qs.serve.common.model.consts.RedisCacheKeys; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.HttpCode; import com.qs.serve.common.util.*; +import com.qs.serve.modules.sys.entity.SysUser; +import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.wx.common.conf.WxMpConfig; import com.qs.serve.modules.wx.common.consts.WxStatusConst; import com.qs.serve.modules.wx.entity.WxApp; @@ -47,6 +51,9 @@ public class WxUserServiceImpl extends ServiceImpl impleme @Autowired(required = false) private WxAppService wxAppService; + @Autowired + private RedisService redisService; + private List getOpenIds(WxMpUserService wxMpUserService,String nextOpenId){ WxMpUserList wxMpUserList = null; List openIds = new ArrayList<>(); @@ -90,41 +97,27 @@ public class WxUserServiceImpl extends ServiceImpl impleme return this.getCurrentWxUser(false); } - @Override - public WxUser getCurrentWxUser(boolean filterZero) { - return this.getCurrentWxUser(filterZero,false); - } @Override - public WxUser getCurrentWxUser(boolean filterZero, boolean updateSub) { - LoginUser loginUser = AuthContextUtils.getLoginUser(); - if(loginUser.getTypeFlag().equals(LoginUserType.APP_USER)){ - WxUser wxUser = getById(loginUser.getUserId()); - if(wxUser==null){ - Assert.throwEx(HttpCode.LOGIN_ERR); - } - if(wxUser.getId().equals("1")){ - return wxUser; - } - String appId = AuthContextUtils.getAppId(); - if(updateSub){ - try { - WxMpService wxMpService = wxMpConfig.wxMpService().switchoverTo(appId); - WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxUser.getOpenId(), GySysConst.LANG_ZH_CN); - wxUser.setSubscribe(wxMpUser.getSubscribe()?1:0); - wxUser.setSubscribeScene(wxMpUser.getSubscribeScene()); - wxUser.setTagidList(JsonUtil.objectToJson(wxMpUser.getTagIds())); - wxUser.setUnionId(wxMpUser.getUnionId()); - } catch (WxErrorException e) { - e.printStackTrace(); - } - } - if(filterZero && (wxUser.getSysUserId()==null||wxUser.getSysUserId().equals("0"))){ - return null; + public WxUser getCurrentWxUser( boolean updateSub) { + String token = ServletUtils.getHeader(GySysConst.APP_TOKEN_PROP); + String wxUserKey = StringUtils.format(RedisCacheKeys.WX_KEY_USER,token); + String wxUserId = redisService.getString(wxUserKey); + String appId = AuthContextUtils.getAppId(); + WxUser wxUser = this.getById(wxUserId); + if(updateSub&&!wxUser.getId().equals("1")){ + try { + WxMpService wxMpService = wxMpConfig.wxMpService().switchoverTo(appId); + WxMpUser wxMpUser = wxMpService.getUserService().userInfo(wxUser.getOpenId(), GySysConst.LANG_ZH_CN); + wxUser.setSubscribe(wxMpUser.getSubscribe()?1:0); + wxUser.setSubscribeScene(wxMpUser.getSubscribeScene()); + wxUser.setTagidList(JsonUtil.objectToJson(wxMpUser.getTagIds())); + wxUser.setUnionId(wxMpUser.getUnionId()); + } catch (WxErrorException e) { + e.printStackTrace(); } - return wxUser; } - return null; + return wxUser; } @Override @@ -141,6 +134,14 @@ public class WxUserServiceImpl extends ServiceImpl impleme return this.list(lqw); } + @Override + public WxUser getByCurrSysUserId(String userId) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(WxUser::getSysUserId,userId); + lqw.eq(WxUser::getAppId,AuthContextUtils.getAppId(false)); + return this.getOne(lqw,false); + } + @Override public List getBySysUserIds(List userIds) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();