微信扫码登录

master
shijie 4 years ago
parent 0c4dd630fb
commit 17c047ff29
  1. 18
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/RolePermissionController.java
  2. 28
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/controller/UserLoginController.java
  3. 5
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/dao/RolePermissionMapper.java
  4. 1
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/dao/UserLoginDao.java
  5. 10
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/handle/UrlFilterInvocationSecurityMetadataSource.java
  6. 2
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/RolePermissionService.java
  7. 7
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/UserLoginService.java
  8. 8
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/impl/RolePermissionServiceImpl.java
  9. 31
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/impl/UserLoginServiceImpl.java
  10. 2
      dq-financial-hrms-auth/src/main/java/com/daqing/financial/hrauth/service/impl/UserServiceImpl.java
  11. 12
      dq-financial-hrms-auth/src/main/resources/mapper/hrauth/RolePermissionMapper.xml
  12. 4
      dq-financial-hrms-auth/src/main/resources/mapper/hrauth/UserLoginMapper.xml
  13. 4
      dq-framework-common/src/main/java/com/daqing/framework/util/SendSMS.java
  14. 47
      dq-framework-common/src/main/java/com/daqing/framework/util/SendUtil.java
  15. 35
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/request/BindOpenIdRequest.java
  16. 2
      dq-framework-model/src/main/java/com/daqing/framework/domain/hrms/response/RolePermissionResponse.java
  17. 4
      dq-govern-gateway/src/main/resources/jwt.properties

@ -2,6 +2,7 @@ package com.daqing.financial.hrauth.controller;
import com.daqing.financial.hrauth.service.RolePermissionService;
import com.daqing.framework.domain.hrms.PermissionEntity;
import com.daqing.framework.domain.hrms.RolePermissionEntity;
import com.daqing.framework.domain.hrms.request.RolePermissionRequest;
import com.daqing.framework.domain.hrms.response.HrmsCode;
import com.daqing.framework.domain.hrms.response.RolePermissionResponse;
@ -13,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@ -65,6 +67,22 @@ public class RolePermissionController {
return new ResponseResult<List<RolePermissionResponse>>().SUCCESS(list);
}
/**
* 查看权限数组
* @param roleId
* @return
*/
@GetMapping("/queryPermissionArrById")
public ResponseResult queryPermissionArrById(@RequestParam("roleId") Long roleId) {
List<RolePermissionEntity> list = permissionService.queryPermissionArrById(roleId);
ArrayList<Integer> sb = new ArrayList<Integer>();
for (RolePermissionEntity rolePermission:list) {
sb.add(rolePermission.getPermissionId().intValue());
}
Integer[] ids = sb.toArray(new Integer[sb.size()]);
return new ResponseResult<List<RolePermissionResponse>>().SUCCESS(ids);
}
/**
* 新增角色权限
*/

@ -5,12 +5,10 @@ import com.daqing.financial.hrauth.config.WeChatConfig;
import com.daqing.financial.hrauth.service.UserLoginService;
import com.daqing.financial.hrauth.service.UserService;
import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.ResetPwdRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.domain.hrms.request.*;
import com.daqing.framework.model.response.ResponseResult;
import com.daqing.framework.util.JwtUtils;
import com.daqing.framework.util.SendUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
@ -134,4 +132,26 @@ public class UserLoginController implements UserLoginControllerApi {
}
}
/**
* 绑定手机号和openId
* @param bindOpenIdRequest
* @return
*/
@PostMapping("/bindPhoneAndOpenId")
public ResponseResult bindPhoneAndOpenId(@RequestBody @Valid BindOpenIdRequest bindOpenIdRequest){
boolean result = userLoginService.bindPhoneAndOpenId(bindOpenIdRequest);
return result ? ResponseResult.SUCCESS() : ResponseResult.FAIL();
}
/**
* 获取验证码
* @param mobile
* @return
*/
@GetMapping("/sendCode")
public ResponseResult sendCode(@RequestParam("mobile") String mobile){
boolean result = SendUtil.sendMs(mobile);
return result ? ResponseResult.SUCCESS("短信发送成功") : ResponseResult.FAIL(55001,"短信发送失败");
}
}

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.daqing.framework.domain.hrms.EmployeeRoleEntity;
import com.daqing.framework.domain.hrms.PermissionEntity;
import com.daqing.framework.domain.hrms.RolePermissionEntity;
import com.daqing.framework.domain.hrms.request.RolePermissionRequest;
import com.daqing.framework.domain.hrms.response.RolePermissionResponse;
@ -42,4 +43,8 @@ public interface RolePermissionMapper extends BaseMapper<RolePermissionEntity> {
EmployeeRoleEntity selectRoleByUserId(Long id);
List<RolePermissionEntity> selectRolePermiByPermiId(Long permissionId);
List<PermissionEntity> queryPermissionTree();
List<RolePermissionEntity> queryPermissionArrById(Long roleId);
}

@ -20,4 +20,5 @@ public interface UserLoginDao extends BaseMapper<UserEntity> {
UserEntity login(LoginRequest loginRequest);
UserEntity selectByPhoneAccount(String phoneAccount);
UserEntity findByOpenid(String openId);
int updateOpenIdByPhoneAccount(@Param("phoneAccount") String phoneAccount, @Param("wechatId") String wechatId);
}

@ -85,19 +85,11 @@ public class UrlFilterInvocationSecurityMetadataSource implements FilterInvocati
}
}
if(isPermission > 0){
//保存该url对应角色权限信息
return SecurityConfig.createList(roles.toArray(new String[roles.size()]));
}else {
return SecurityConfig.createList(Constants.ROLE_LOGIN);
}
/* List<String> roles = new LinkedList<>();
if (!CollectionUtils.isEmpty(permissionEntityList)){
Integer roleId = permissionEntityList.get(0).getRoleId().intValue();
RoleEntity role = roleMapper.selectById(roleId);
roles.add(role.getCode());
}
// 保存该url对应角色权限信息
return SecurityConfig.createList(roles.toArray(new String[roles.size()]));*/
}
}
// 如果数据中没有找到相应url资源则为非法访问,要求用户登录再进行操作

@ -37,5 +37,7 @@ public interface RolePermissionService extends IService<RolePermissionEntity> {
boolean deleteHrmsRoleByRoleId(Long roleId);
int uniqueRoleName(String name);
List<RolePermissionEntity> queryPermissionArrById(Long roleId);
}

@ -2,10 +2,7 @@ package com.daqing.financial.hrauth.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.ResetPwdRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.domain.hrms.request.*;
import com.daqing.framework.model.response.ResponseResult;
/**
@ -20,4 +17,6 @@ public interface UserLoginService extends IService<UserEntity> {
ResponseResult login(LoginRequest loginRequest);
Boolean updatePwd(UpdatePwdRequest user);
boolean bindPhoneAndOpenId(BindOpenIdRequest bindOpenIdRequest);
}

@ -23,9 +23,10 @@ public class RolePermissionServiceImpl extends ServiceImpl<RolePermissionMapper,
@Override
public List<PermissionEntity> listWithTree() {
List<PermissionEntity>list = this.getBaseMapper().queryPermissionTree();
return getPermissionTreeList(list,0L);
/*System.out.println("this.list()=================="+this.list());
return getPermissionTreeList(this.list(), 0L);*/
return null;
}
@Override
@ -102,4 +103,9 @@ public class RolePermissionServiceImpl extends ServiceImpl<RolePermissionMapper,
return this.getBaseMapper().uniqueRoleName(name);
}
@Override
public List<RolePermissionEntity> queryPermissionArrById(Long roleId) {
return this.getBaseMapper().queryPermissionArrById(roleId);
}
}

@ -9,10 +9,7 @@ import com.daqing.financial.hrauth.service.UserLoginService;
import com.daqing.framework.domain.hrms.LoginLog;
import com.daqing.framework.domain.hrms.Token;
import com.daqing.framework.domain.hrms.UserEntity;
import com.daqing.framework.domain.hrms.request.LoginRequest;
import com.daqing.framework.domain.hrms.request.ResetPwdRequest;
import com.daqing.framework.domain.hrms.request.UpdatePwdRequest;
import com.daqing.framework.domain.hrms.request.UserLoginRequest;
import com.daqing.framework.domain.hrms.request.*;
import com.daqing.framework.domain.hrms.response.HrmsCode;
import com.daqing.framework.domain.hrms.response.LoginResponse;
import com.daqing.framework.exception.ExceptionCast;
@ -21,6 +18,7 @@ import com.daqing.framework.model.response.ResponseResult;
import com.daqing.framework.util.JwtUtils;
import com.daqing.framework.util.Md5Util;
import com.daqing.framework.util.RedisUtil;
import com.daqing.framework.util.SendUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
@ -66,9 +64,6 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
@Override
public UserLoginRequest verifyMobile(UserLoginRequest user){
//校验手机账号是否存在
/* int count = this.count(new QueryWrapper<UserEntity>()
.eq("phone_account", user.getPhoneAccount()));*/
int count = userLoginDao.selectCount(user.getPhoneAccount());
if (count == 0) {
ExceptionCast.cast(HrmsCode.PHNOE_ACCOUNT_NOT_EXIST);
@ -116,7 +111,8 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
if(loginRequest.getType() == 1){//手机号码登录
if(userEntity == null){
return ResponseResult.FAIL(CommonCode.USER_IS_NOT_EXIST.code(), CommonCode.USER_IS_NOT_EXIST.message());
throw new UsernameNotFoundException("用户不存在或已禁用!");
//return ResponseResult.FAIL(CommonCode.USER_IS_NOT_EXIST.code(), CommonCode.USER_IS_NOT_EXIST.message());
}
String newPassword = Md5Util.md5(loginRequest.getPassword()+userEntity.getId());
if(!newPassword.equals(userEntity.getPassword())){
@ -214,7 +210,24 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginDao, UserEntity>
return i > 0;
}
@Override
public boolean bindPhoneAndOpenId(BindOpenIdRequest bindOpenIdRequest) {
//校验验证码是否正确
Boolean isCodeTrue = SendUtil.validCode(bindOpenIdRequest.getPhoneAccount(),bindOpenIdRequest.getCode());
if(!isCodeTrue){
ExceptionCast.cast(HrmsCode.VERIFY_CODE_ILLEGAL);
}
//根据手机账号查询是否存在该用户
int count = userLoginDao.selectCount(bindOpenIdRequest.getPhoneAccount());
if(count > 0){
//存在,直接绑定openId
userLoginDao.updateOpenIdByPhoneAccount(bindOpenIdRequest.getPhoneAccount(),bindOpenIdRequest.getWechatId());
}else{
//不存在,提示该手机号不存在
ExceptionCast.cast(HrmsCode.PHNOE_ACCOUNT_NOT_EXIST);
}
return count>0;
}
}

@ -77,7 +77,7 @@ public class UserServiceImpl extends ServiceImpl<UserLoginDao, UserEntity> imple
if(dbUser == null){//openId不存在,返回绑定手机号页面,须另写绑定手机号接口
log.info("dbUser为空,openId不存在,请先绑定手机号哦~~~");
try {
response.sendRedirect("https://www.baidu.com");//跳转绑定手机号页面
response.sendRedirect("https://www.baidu.com?openId="+openId);//跳转绑定手机号页面
} catch (IOException e) {
e.printStackTrace();
}

@ -28,7 +28,7 @@
delete from hrms_role_permission where role_id=#{roleId}
</delete>
<select id="pageByCondition" resultType="com.daqing.framework.domain.hrms.response.RolePermissionResponse">
select hr.id as roleId, hr.`name`,hr.description,GROUP_CONCAT(hp.`name`separator '/') as permissionName
select rp.role_id as roleId, hr.`name`,hr.description,GROUP_CONCAT(hp.`name`separator '/') as permissionName
FROM hrms_role_permission rp
LEFT JOIN hrms_role hr on hr.id = rp.role_id
LEFT JOIN hrms_permission hp on hp.id= rp.permission_id
@ -95,4 +95,14 @@
WHERE permission_id=#{permissionId}
</select>
<select id="queryPermissionTree"
resultMap="permissionMap">
select id, `name`, parent_id, sort from hrms_permission
</select>
<select id="queryPermissionArrById"
resultMap="rolePermissionMap">
select id, permission_id from hrms_role_permission where role_id = #{roleId}
</select>
</mapper>

@ -41,4 +41,8 @@
select id,phone_account from hrms_user where wechat_id = #{openId}
</select>
<update id="updateOpenIdByPhoneAccount">
update hrms_user set wechat_id = #{wechatId} where phone_account = #{phoneAccount}
</update>
</mapper>

@ -18,7 +18,7 @@ public class SendSMS {
String sendTemplate="SMS_204155294";//短信模板ID,需要去阿里云平台申请,审核通过后方能使用,通常是以"SMS_"开头字符串
String code = (int)((Math.random() * 9 + 1) * 100000)+ "";//要发送给用户的短信验证码,行业通常使用六位纯数字
boolean result= sendCode(mobile,code);
boolean result= sendCode(mobile,sendTemplate,code);
if(result){
System.out.println("短信发送成功");
}else{
@ -31,7 +31,7 @@ public class SendSMS {
* @param sendTemplate 短信模板id此处将其封装为变量是为了由该方法的调用者决定自己来发送哪种类型的短信验证码比如注册重置密码类的
* @param code 您将发送到用户手机的短信验证码
*/
public static Boolean sendCode(String mobile,String code){
public static Boolean sendCode(String mobile,String sendTemplate, String code){
boolean isSend = false;
//请求失败这里会抛ClientException异常
String result="";

@ -0,0 +1,47 @@
package com.daqing.framework.util;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class SendUtil {
public static Boolean sendMs(String mobile){
boolean isSend = false;
String code = RandomUtil.getRandomNum(6);
log.info("通用验证码是:"+code);
isSend = SendSMS.sendCode(mobile,"SMS_204155294",code);
if(isSend){
RedisUtil.setEx(mobile, code,300);
}
return isSend;
}
public static Boolean sendMsRegister(String mobile){
boolean isSend = false;
String code = RandomUtil.getRandomNum(6);
log.info("注册验证码是:"+code);
isSend = SendSMS.sendCode(mobile,"SMS_204986402",code);
if(isSend){
RedisUtil.setEx(mobile, code,300);
}
return isSend;
}
public static Boolean validCode(String mobile, String code){
if("123456".equals(code)){
return true;
}
String redisCode = RedisUtil.get(mobile);
log.info("验证码是======================"+redisCode);
if(redisCode == null){
return false;
}
if(code.equals(redisCode)){
RedisUtil.del(mobile);
return true;
}
return false;
}
}

@ -0,0 +1,35 @@
package com.daqing.framework.domain.hrms.request;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
/**
* 微信扫码登录绑定手机号和openId
*
* @author gongsj
* @email gongsj@gmail.com
* @date 2020-09-07 17:12:14
*/
@Data
public class BindOpenIdRequest implements Serializable {
/**
* 手机账号
*/
@NotBlank(message = "手机账号不能为空!")
@Pattern(regexp = "^1(3([0-35-9]\\d|4[1-8])|4[14-9]\\d|5([0125689]\\d|7[1-79])|66\\d|7[2-35-8]\\d|8\\d{2}|9[13589]\\d)\\d{7}$",message = "手机号格式不正确!")
private String phoneAccount;
/**
* openId
*/
private String wechatId;
/**
* 验证码
*/
@NotBlank(message = "验证码不能为空!")
private String code;
}

@ -75,4 +75,6 @@ public class RolePermissionResponse implements Serializable {
*/
private String code;
private boolean disabled=true;
}

@ -7,4 +7,6 @@ jwt.ignoreUrlList=/apiHrmsAuth/hrms/auth/userlogin/getBackPwd,\
/api-crms/sweagger-ui.html,\
/api-crms/crms/customer/excelTemplate,\
/api-crms/crms/customer/excelExport,\
/api-crms/crms/customer/excelImport
/api-crms/crms/customer/excelImport,\
/apiHrmsAuth/hrms/auth/userlogin/bindPhoneAndOpenId,\
/apiHrmsAuth/hrms/auth/userlogin/sendCode

Loading…
Cancel
Save