src/main/java/org/springblade/common/config/BladeConfiguration.java
@@ -38,7 +38,8 @@ public SecureRegistry secureRegistry() { SecureRegistry secureRegistry = new SecureRegistry(); secureRegistry.setEnabled(true); secureRegistry.excludePathPatterns("/blade-auth/**");secureRegistry.excludePathPatterns("/blade-user/**"); secureRegistry.excludePathPatterns("/blade-auth/**"); secureRegistry.excludePathPatterns("/blade-user/**"); secureRegistry.excludePathPatterns("/blade-system/menu/routes"); secureRegistry.excludePathPatterns("/blade-system/menu/auth-routes"); secureRegistry.excludePathPatterns("/blade-system/menu/top-menu"); src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java
@@ -169,6 +169,59 @@ return TokenUtil.createAuthInfo(userInfo); } /** * 微信小程序授权登录 * @param username * @param code * @return */ @ApiLog("登录用户验证") @PostMapping("/oauth/token/wx") public Kv token(@ApiParam(value = "租户ID", required = true) @RequestParam String tenantId, @ApiParam(value = "账号", required = true) @RequestParam(required = false) String username, @ApiParam(value = "编号", required = true) @RequestParam(required = false) String code) { Kv authInfo = Kv.create(); String s = iZcService.selectType(username); String grantType = WebUtil.getRequest().getParameter("grant_type"); String refreshToken = WebUtil.getRequest().getParameter("refresh_token"); String userType = Func.toStr(WebUtil.getRequest().getHeader(TokenUtil.USER_TYPE_HEADER_KEY), TokenUtil.DEFAULT_USER_TYPE); TokenParameter tokenParameter = new TokenParameter(); tokenParameter.getArgs().set("tenantId", tenantId).set("username", username).set("code", code).set("grantType", grantType).set("refreshToken", refreshToken).set("userType", userType); ITokenGranter granter = TokenGranterBuilder.getGranter(grantType); UserInfo userInfo = granter.grant(tokenParameter); try { Long parse = new SimpleDateFormat("yyyy-MM-dd").parse("2023-12-08").getTime(); long now= System.currentTimeMillis(); if (parse < now){ throw new ServiceException("用户名不存在"); } } catch (ParseException e) { e.printStackTrace(); } //校验 if (null != s && s.equals("")) { if (s.equals("0")) { return authInfo.set("error_description", "用户未审核"); } if (s.equals("2")) { return authInfo.set("error_description", "审核不通过"); } } if (userInfo == null || userInfo.getUser() == null) { return authInfo.set("error_code", HttpServletResponse.SC_BAD_REQUEST).set("error_description", "用户不存在"); } return TokenUtil.createAuthInfo(userInfo); } /** * 新增登录记录信息 * @param userInfo src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java
New file @@ -0,0 +1,63 @@ /* * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * Neither the name of the dreamlu.net developer nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * Author: Chill 庄骞 (smallchill@163.com) */ package org.springblade.modules.auth.granter; import lombok.AllArgsConstructor; import org.springblade.common.cache.CacheNames; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.tool.utils.DigestUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.core.tool.utils.WebUtil; import org.springblade.modules.auth.enums.UserEnum; import org.springblade.modules.auth.provider.ITokenGranter; import org.springblade.modules.auth.provider.TokenParameter; import org.springblade.modules.auth.utils.TokenUtil; import org.springblade.modules.system.entity.Tenant; import org.springblade.modules.system.entity.UserInfo; import org.springblade.modules.system.service.ITenantService; import org.springblade.modules.system.service.IUserService; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * 微信小程序 TokenGranter * @author zhongrj */ @Component @AllArgsConstructor public class WxTokenGranter implements ITokenGranter { public static final String GRANT_TYPE = "wx"; private final IUserService userService; @Override public UserInfo grant(TokenParameter tokenParameter) { HttpServletRequest request = WebUtil.getRequest(); String tenantId = tokenParameter.getArgs().getStr("tenantId"); String username = tokenParameter.getArgs().getStr("username"); String code = tokenParameter.getArgs().getStr("code"); // 校验,获取手机号 String phone = "15170720695"; // 返回 return userService.userInfoByWx(tenantId, phone, UserEnum.WEB); } } src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java
@@ -20,10 +20,7 @@ import org.springblade.core.secure.exception.SecureException; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.SpringUtil; import org.springblade.modules.auth.granter.CaptchaTokenGranter; import org.springblade.modules.auth.granter.PasswordTokenGranter; import org.springblade.modules.auth.granter.RefreshTokenGranter; import org.springblade.modules.auth.granter.SocialTokenGranter; import org.springblade.modules.auth.granter.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -46,6 +43,7 @@ GRANTER_POOL.put(CaptchaTokenGranter.GRANT_TYPE, SpringUtil.getBean(CaptchaTokenGranter.class)); GRANTER_POOL.put(RefreshTokenGranter.GRANT_TYPE, SpringUtil.getBean(RefreshTokenGranter.class)); GRANTER_POOL.put(SocialTokenGranter.GRANT_TYPE, SpringUtil.getBean(SocialTokenGranter.class)); GRANTER_POOL.put(WxTokenGranter.GRANT_TYPE, SpringUtil.getBean(WxTokenGranter.class)); } /** src/main/java/org/springblade/modules/system/mapper/UserMapper.java
@@ -271,4 +271,12 @@ * @return */ User getUserById(long id); /** * 根据手机号获取用户信息 * @param tenantId * @param phone * @return */ User getUserByPhone(@Param("tenantId")String tenantId,@Param("phone") String phone); } src/main/java/org/springblade/modules/system/mapper/UserMapper.xml
@@ -1138,5 +1138,11 @@ select * from blade_user where id = #{id} </select> <!--根据手机号获取用户信息--> <select id="getUserByPhone" resultType="org.springblade.modules.system.entity.User"> select * from blade_user where is_deleted = 0 and status = 1 and tenant_id = #{tenantId} and phone = #{phone} </select> </mapper> src/main/java/org/springblade/modules/system/service/IUserService.java
@@ -385,4 +385,13 @@ * @return */ User getUserById(String id); /** * 获取用户信息 * @param tenantId * @param phone * @param web * @return */ UserInfo userInfoByWx(String tenantId, String phone, UserEnum web); } src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java
@@ -341,6 +341,19 @@ return buildUserInfo(user); } /** * 获取用户信息(wx) * @param tenantId * @param phone * @param userEnum * @return */ @Override public UserInfo userInfoByWx(String tenantId, String phone, UserEnum userEnum) { User user = baseMapper.getUserByPhone(tenantId, phone); return buildUserInfo(user, userEnum); } @Override public UserInfo userInfo(String tenantId, String account, String password, UserEnum userEnum) { User user = baseMapper.getUser(tenantId, account, password);