添加了生成微信二维码登录的接口,并且可以跳转到配置的回调地址,修改了权限配置文件
This commit is contained in:
parent
ef228be1ec
commit
fd3cfa03f7
@ -2,6 +2,8 @@ package com.xkrs.common.account;
|
|||||||
|
|
||||||
import com.xkrs.common.encapsulation.OutputEncapsulation;
|
import com.xkrs.common.encapsulation.OutputEncapsulation;
|
||||||
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
||||||
|
import com.xkrs.dao.AppletsUserDao;
|
||||||
|
import com.xkrs.model.entity.AppletsUser;
|
||||||
import com.xkrs.model.vo.SysUserVo;
|
import com.xkrs.model.vo.SysUserVo;
|
||||||
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Claims;
|
||||||
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.Jwts;
|
||||||
@ -12,7 +14,6 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio
|
|||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.authority.AuthorityUtils;
|
import org.springframework.security.core.authority.AuthorityUtils;
|
||||||
|
|
||||||
import javax.crypto.SecretKey;
|
import javax.crypto.SecretKey;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
@ -52,6 +52,8 @@ class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
|||||||
.antMatchers(HttpMethod.GET,"/callback").permitAll()
|
.antMatchers(HttpMethod.GET,"/callback").permitAll()
|
||||||
.antMatchers(HttpMethod.GET,"/weChatScanCodeLogin").permitAll()
|
.antMatchers(HttpMethod.GET,"/weChatScanCodeLogin").permitAll()
|
||||||
.antMatchers(HttpMethod.GET,"/api/user/findUserAndWeChatUser").permitAll()
|
.antMatchers(HttpMethod.GET,"/api/user/findUserAndWeChatUser").permitAll()
|
||||||
|
.antMatchers(HttpMethod.GET,"/api/user/findUserAndWeChatByUserName").permitAll()
|
||||||
|
.antMatchers(HttpMethod.GET,"/api/user/verificationCode").permitAll()
|
||||||
// 所有其它请求需要身份认证
|
// 所有其它请求需要身份认证
|
||||||
.anyRequest().authenticated()
|
.anyRequest().authenticated()
|
||||||
.and()
|
.and()
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package com.xkrs.controller;
|
package com.xkrs.controller;
|
||||||
|
|
||||||
|
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
|
||||||
|
import com.aliyuncs.exceptions.ClientException;
|
||||||
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
import com.xkrs.common.encapsulation.PromptMessageEnum;
|
||||||
import com.xkrs.common.tool.TokenUtil;
|
import com.xkrs.common.tool.TokenUtil;
|
||||||
import com.xkrs.dao.AppletsUserDao;
|
import com.xkrs.dao.AppletsUserDao;
|
||||||
@ -10,7 +12,9 @@ import com.xkrs.model.qo.SysUserQo;
|
|||||||
import com.xkrs.model.validation.SysUserQoInsert;
|
import com.xkrs.model.validation.SysUserQoInsert;
|
||||||
import com.xkrs.model.validation.SysUserQoUpdate;
|
import com.xkrs.model.validation.SysUserQoUpdate;
|
||||||
import com.xkrs.model.vo.SysUserVo;
|
import com.xkrs.model.vo.SysUserVo;
|
||||||
|
import com.xkrs.service.RedisService;
|
||||||
import com.xkrs.service.SysUserService;
|
import com.xkrs.service.SysUserService;
|
||||||
|
import com.xkrs.utils.RandomUtil;
|
||||||
import org.springframework.context.i18n.LocaleContextHolder;
|
import org.springframework.context.i18n.LocaleContextHolder;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@ -24,9 +28,11 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationErrorList;
|
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationErrorList;
|
||||||
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
|
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
|
||||||
|
import static com.xkrs.utils.AliYunSmsUtils.sendSms;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 系统用户Controller
|
* 系统用户Controller
|
||||||
@ -45,6 +51,9 @@ public class SysUserController {
|
|||||||
@Resource
|
@Resource
|
||||||
private AppletsUserDao appletsUserDao;
|
private AppletsUserDao appletsUserDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private RedisService redisService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 登录用户Token验证
|
* 登录用户Token验证
|
||||||
* @return
|
* @return
|
||||||
@ -269,6 +278,7 @@ public class SysUserController {
|
|||||||
Locale locale = LocaleContextHolder.getLocale();
|
Locale locale = LocaleContextHolder.getLocale();
|
||||||
String openId = (String) map.get("openId");
|
String openId = (String) map.get("openId");
|
||||||
String phone = (String) map.get("phone");
|
String phone = (String) map.get("phone");
|
||||||
|
String code = (String) map.get("code");
|
||||||
SysUserEntity byUserName = sysUserDao.findByUserName(phone);
|
SysUserEntity byUserName = sysUserDao.findByUserName(phone);
|
||||||
if(byUserName == null){
|
if(byUserName == null){
|
||||||
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"输入错误或未注册,请检查注册!",locale);
|
return outputEncapsulationObject(PromptMessageEnum.DATA_NONE,"输入错误或未注册,请检查注册!",locale);
|
||||||
@ -277,6 +287,9 @@ public class SysUserController {
|
|||||||
if(byOpenId != null){
|
if(byOpenId != null){
|
||||||
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"您已绑定网站账号,请勿重复绑定!",locale);
|
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"您已绑定网站账号,请勿重复绑定!",locale);
|
||||||
}
|
}
|
||||||
|
if(!redisService.get(phone).equals(code)){
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.DATA_WRONG,"验证码错误,请重新输入!",locale);
|
||||||
|
}
|
||||||
sysUserDao.updateOpenIdByPhone(phone,openId);
|
sysUserDao.updateOpenIdByPhone(phone,openId);
|
||||||
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"绑定成功!",locale);
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"绑定成功!",locale);
|
||||||
}
|
}
|
||||||
@ -305,4 +318,40 @@ public class SysUserController {
|
|||||||
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,map,locale);
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,map,locale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据用户名查询用户信息
|
||||||
|
* @param userName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/findUserAndWeChatByUserName")
|
||||||
|
public String findUserAndWeChatByUserName(@RequestParam("userName") String userName){
|
||||||
|
Locale locale = LocaleContextHolder.getLocale();
|
||||||
|
Map map = new HashMap(3);
|
||||||
|
SysUserVo sysUserVo = sysUserDao.selectUserByUserName(userName);
|
||||||
|
map.put("user",sysUserVo);
|
||||||
|
if(sysUserVo.getOpenId() == null || "".equals(sysUserVo.getOpenId())){
|
||||||
|
map.put("weChat",null);
|
||||||
|
}else {
|
||||||
|
AppletsUser byOpenId = appletsUserDao.findByOpenId(sysUserVo.getOpenId());
|
||||||
|
map.put("weChat",byOpenId);
|
||||||
|
}
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,map,locale);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 发送手机号
|
||||||
|
* @param phoneNumber
|
||||||
|
* @return
|
||||||
|
* @throws ClientException
|
||||||
|
*/
|
||||||
|
@GetMapping("/verificationCode")
|
||||||
|
public String verificationCode(@RequestParam("phoneNumber") String phoneNumber) throws ClientException {
|
||||||
|
// 获取区域信息
|
||||||
|
Locale locale = LocaleContextHolder.getLocale();
|
||||||
|
String optCode = String.valueOf(RandomUtil.returnCode());
|
||||||
|
redisService.set(phoneNumber,optCode,10, TimeUnit.MINUTES);
|
||||||
|
SendSmsResponse response =sendSms(phoneNumber,optCode);
|
||||||
|
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"",locale);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -92,7 +92,7 @@ public class WeChatController {
|
|||||||
//使用jwt根据member对象生成token字符串
|
//使用jwt根据member对象生成token字符串
|
||||||
//String jwtToken = JwtUtils.getJwtToken(member.getId(), member.getNickname());
|
//String jwtToken = JwtUtils.getJwtToken(member.getId(), member.getNickname());
|
||||||
|
|
||||||
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"操作成功!",locale);
|
return "redirect:http://localhost:3000?openId="+openid;
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"操作失败!",locale);
|
return outputEncapsulationObject(PromptMessageEnum.PROCESS_FAIL,"操作失败!",locale);
|
||||||
}
|
}
|
||||||
@ -127,7 +127,6 @@ public class WeChatController {
|
|||||||
String url =String.format(
|
String url =String.format(
|
||||||
baseUrl,
|
baseUrl,
|
||||||
ConstantConfig.WX_OPEN_APP_ID,
|
ConstantConfig.WX_OPEN_APP_ID,
|
||||||
ConstantConfig.WX_OPEN_APP_SECRET,
|
|
||||||
redirect_url,
|
redirect_url,
|
||||||
"atguigu"
|
"atguigu"
|
||||||
);
|
);
|
||||||
|
@ -83,7 +83,7 @@ public interface SysUserDao extends JpaRepository<SysUserEntity,Integer> {
|
|||||||
* 查询用户信息
|
* 查询用户信息
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,addTime) " +
|
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,openId,addTime) " +
|
||||||
"from SysUserEntity")
|
"from SysUserEntity")
|
||||||
List<SysUserVo> selectAll();
|
List<SysUserVo> selectAll();
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ public interface SysUserDao extends JpaRepository<SysUserEntity,Integer> {
|
|||||||
* @param userName
|
* @param userName
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,addTime) " +
|
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,openId,addTime) " +
|
||||||
"from SysUserEntity where userName = :userName")
|
"from SysUserEntity where userName = :userName")
|
||||||
SysUserVo selectUserByUserName(String userName);
|
SysUserVo selectUserByUserName(String userName);
|
||||||
|
|
||||||
@ -101,7 +101,7 @@ public interface SysUserDao extends JpaRepository<SysUserEntity,Integer> {
|
|||||||
* @param openId
|
* @param openId
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,addTime) " +
|
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,openId,addTime) " +
|
||||||
"from SysUserEntity where openId = :openId")
|
"from SysUserEntity where openId = :openId")
|
||||||
SysUserVo selectUserByOpenId(String openId);
|
SysUserVo selectUserByOpenId(String openId);
|
||||||
|
|
||||||
|
@ -74,6 +74,12 @@ public class SysUserEntity implements Serializable {
|
|||||||
@Column(columnDefinition = "varchar(88)")
|
@Column(columnDefinition = "varchar(88)")
|
||||||
private String openId;
|
private String openId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信扫码登录的openId
|
||||||
|
*/
|
||||||
|
@Column(columnDefinition = "varchar(88)")
|
||||||
|
private String weChatOpenId;
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -194,6 +200,14 @@ public class SysUserEntity implements Serializable {
|
|||||||
this.openId = openId;
|
this.openId = openId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getWeChatOpenId() {
|
||||||
|
return weChatOpenId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWeChatOpenId(String weChatOpenId) {
|
||||||
|
this.weChatOpenId = weChatOpenId;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "SysUserEntity{" +
|
return "SysUserEntity{" +
|
||||||
@ -212,6 +226,7 @@ public class SysUserEntity implements Serializable {
|
|||||||
", deleteFlag=" + deleteFlag +
|
", deleteFlag=" + deleteFlag +
|
||||||
", lastEntryIp='" + lastEntryIp + '\'' +
|
", lastEntryIp='" + lastEntryIp + '\'' +
|
||||||
", openId='" + openId + '\'' +
|
", openId='" + openId + '\'' +
|
||||||
|
", weChatOpenId='" + weChatOpenId + '\'' +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,14 +18,17 @@ public class SysUserVo implements Serializable {
|
|||||||
|
|
||||||
private Integer activeFlag;
|
private Integer activeFlag;
|
||||||
|
|
||||||
|
private String openId;
|
||||||
|
|
||||||
private LocalDateTime addTime;
|
private LocalDateTime addTime;
|
||||||
|
|
||||||
public SysUserVo(Integer id, String reallyName, String telephone, String userDepartment, Integer activeFlag, LocalDateTime addTime) {
|
public SysUserVo(Integer id, String reallyName, String telephone, String userDepartment, Integer activeFlag, String openId, LocalDateTime addTime) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.reallyName = reallyName;
|
this.reallyName = reallyName;
|
||||||
this.telephone = telephone;
|
this.telephone = telephone;
|
||||||
this.userDepartment = userDepartment;
|
this.userDepartment = userDepartment;
|
||||||
this.activeFlag = activeFlag;
|
this.activeFlag = activeFlag;
|
||||||
|
this.openId = openId;
|
||||||
this.addTime = addTime;
|
this.addTime = addTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +72,14 @@ public class SysUserVo implements Serializable {
|
|||||||
this.activeFlag = activeFlag;
|
this.activeFlag = activeFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getOpenId() {
|
||||||
|
return openId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpenId(String openId) {
|
||||||
|
this.openId = openId;
|
||||||
|
}
|
||||||
|
|
||||||
public LocalDateTime getAddTime() {
|
public LocalDateTime getAddTime() {
|
||||||
return addTime;
|
return addTime;
|
||||||
}
|
}
|
||||||
@ -85,6 +96,7 @@ public class SysUserVo implements Serializable {
|
|||||||
", telephone='" + telephone + '\'' +
|
", telephone='" + telephone + '\'' +
|
||||||
", userDepartment='" + userDepartment + '\'' +
|
", userDepartment='" + userDepartment + '\'' +
|
||||||
", activeFlag=" + activeFlag +
|
", activeFlag=" + activeFlag +
|
||||||
|
", openId='" + openId + '\'' +
|
||||||
", addTime=" + addTime +
|
", addTime=" + addTime +
|
||||||
'}';
|
'}';
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ spring.datasource.hikari.validation-timeout = 3000
|
|||||||
## Spring Data JPA 配置
|
## Spring Data JPA 配置
|
||||||
spring.jpa.database = POSTGRESQL
|
spring.jpa.database = POSTGRESQL
|
||||||
spring.jpa.database-platform = org.hibernate.dialect.PostgreSQLDialect
|
spring.jpa.database-platform = org.hibernate.dialect.PostgreSQLDialect
|
||||||
spring.jpa.show-sql = true
|
spring.jpa.show-sql = false
|
||||||
# 指定 ddl mode (none, validate, create, create-drop, update)
|
# 指定 ddl mode (none, validate, create, create-drop, update)
|
||||||
spring.jpa.hibernate.ddl-auto = update
|
spring.jpa.hibernate.ddl-auto = update
|
||||||
# 命名策略
|
# 命名策略
|
||||||
@ -39,17 +39,17 @@ spring.jpa.properties.hibernate.dialect = org.hibernate.spatial.dialect.postgis.
|
|||||||
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
|
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
|
||||||
|
|
||||||
## Redis配置
|
## Redis配置
|
||||||
#spring.cache.type = redis
|
spring.cache.type = redis
|
||||||
#spring.redis.database = 9
|
spring.redis.database = 9
|
||||||
#spring.redis.host = localhost
|
spring.redis.host = localhost
|
||||||
#spring.redis.port = 6379
|
spring.redis.port = 6379
|
||||||
#spring.redis.password = sdust2020
|
spring.redis.password = sdust2020
|
||||||
#spring.redis.timeout = 10000
|
spring.redis.timeout = 10000
|
||||||
#spring.redis.lettuce.pool.max-active = 100
|
spring.redis.lettuce.pool.max-active = 100
|
||||||
#spring.redis.lettuce.pool.max-wait = 10000
|
spring.redis.lettuce.pool.max-wait = 10000
|
||||||
#spring.redis.lettuce.pool.max-idle = 100
|
spring.redis.lettuce.pool.max-idle = 100
|
||||||
#spring.redis.lettuce.pool.min-idle = 1
|
spring.redis.lettuce.pool.min-idle = 1
|
||||||
#spring.redis.lettuce.shutdown-timeout = 0
|
spring.redis.lettuce.shutdown-timeout = 0
|
||||||
|
|
||||||
## Devtools配置
|
## Devtools配置
|
||||||
spring.devtools.livereload.enabled = true
|
spring.devtools.livereload.enabled = true
|
||||||
|
Loading…
Reference in New Issue
Block a user