调整微信小程序用户和公众号用户代码结构
This commit is contained in:
parent
f5d7c61123
commit
9d5b198ecb
@ -190,4 +190,9 @@ public interface ISystemConstant {
|
||||
*/
|
||||
String DATE_FORMATTER_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
/**
|
||||
* 默认密码
|
||||
*/
|
||||
String DEFAULT_PASSWORD = "88888888";
|
||||
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public class MiniAppProperties {
|
||||
private String appSecret;
|
||||
|
||||
public Boolean getActive() {
|
||||
return active;
|
||||
return active == null ? false : active;
|
||||
}
|
||||
|
||||
public void setActive(Boolean active) {
|
||||
|
@ -35,7 +35,7 @@ public class OfficialAccountProperties {
|
||||
}
|
||||
|
||||
public Boolean getActivate() {
|
||||
return activate;
|
||||
return activate == null ? false : activate;
|
||||
}
|
||||
|
||||
public void setActivate(Boolean activate) {
|
||||
|
@ -17,6 +17,11 @@
|
||||
<artifactId>login-base</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>ink.wgink</groupId>
|
||||
<artifactId>module-wechat</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
@ -1,10 +1,12 @@
|
||||
package ink.wgink.login.wechat.controller.api.sign;
|
||||
|
||||
import ink.wgink.annotation.CheckRequestBodyAnnotation;
|
||||
import ink.wgink.exceptions.PropertiesException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.login.wechat.pojo.vos.sign.MiniAppLoginVO;
|
||||
import ink.wgink.login.wechat.service.sign.IMiniAppSignService;
|
||||
import ink.wgink.pojo.result.SuccessResultData;
|
||||
import ink.wgink.properties.wechat.miniapp.MiniAppProperties;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@ -27,12 +29,17 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequestMapping(ISystemConstant.WECHAT_MINI_APP_PREFIX + "/sign")
|
||||
public class MiniAppSignController {
|
||||
|
||||
@Autowired
|
||||
private MiniAppProperties miniAppProperties;
|
||||
@Autowired
|
||||
private IMiniAppSignService miniAppSignService;
|
||||
|
||||
@PostMapping("default")
|
||||
@CheckRequestBodyAnnotation
|
||||
public SuccessResultData<String> defaultSign(@RequestBody MiniAppLoginVO miniAppLoginVO) throws Exception {
|
||||
if (!miniAppProperties.getActive()) {
|
||||
throw new PropertiesException("小程序配置未激活");
|
||||
}
|
||||
return new SuccessResultData<>(miniAppSignService.defaultSign(miniAppLoginVO));
|
||||
}
|
||||
|
||||
|
@ -15,8 +15,6 @@ import ink.wgink.pojo.result.SuccessResultData;
|
||||
*/
|
||||
public interface IMiniAppSignService {
|
||||
|
||||
String WECHAT_RANDOM_USER_PREFIX = "WX_";
|
||||
|
||||
/**
|
||||
* 默认登录
|
||||
*
|
||||
|
@ -7,11 +7,11 @@ import ink.wgink.exceptions.WechatAccessTokenForUserException;
|
||||
import ink.wgink.exceptions.WechatUserInfoException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.login.base.service.BaseAppSignService;
|
||||
import ink.wgink.module.wechat.pojo.bos.miniapp.MiniAppUserInfoBO;
|
||||
import ink.wgink.module.wechat.service.miniapp.IMiniAppUserService;
|
||||
import ink.wgink.properties.wechat.miniapp.MiniAppProperties;
|
||||
import ink.wgink.login.wechat.pojo.bos.user.MiniAppUserInfoBO;
|
||||
import ink.wgink.login.wechat.pojo.vos.sign.MiniAppLoginVO;
|
||||
import ink.wgink.login.wechat.service.sign.IMiniAppSignService;
|
||||
import ink.wgink.login.wechat.service.user.IMiniAppUserService;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -46,9 +46,6 @@ public class MiniAppSignServiceImpl extends BaseAppSignService implements IMiniA
|
||||
if (miniAppLoginVO == null) {
|
||||
throw new PropertiesException("未有相关配置");
|
||||
}
|
||||
if (miniAppProperties.getActive() == null || !miniAppProperties.getActive()) {
|
||||
throw new PropertiesException("未激活小程序配置");
|
||||
}
|
||||
Map<String, Object> params = new HashMap<>(2);
|
||||
params.put("appid", miniAppProperties.getAppKey());
|
||||
params.put("secret", miniAppProperties.getAppSecret());
|
||||
@ -74,7 +71,7 @@ public class MiniAppSignServiceImpl extends BaseAppSignService implements IMiniA
|
||||
throw new SearchException("用户不存在");
|
||||
}
|
||||
String isRandomUsername = ISystemConstant.IS_FALSE_INT;
|
||||
if (userPO.getUserUsername().startsWith(IMiniAppSignService.WECHAT_RANDOM_USER_PREFIX)) {
|
||||
if (userPO.getUserUsername().startsWith(IMiniAppUserService.MINIAPP_RANDOM_USER_PREFIX)) {
|
||||
isRandomUsername = ISystemConstant.IS_TRUE_INT;
|
||||
}
|
||||
return getToken(userPO) + "_" + isRandomUsername;
|
||||
|
@ -1,40 +0,0 @@
|
||||
package ink.wgink.login.wechat.startup;
|
||||
|
||||
import ink.wgink.login.wechat.dao.user.IMiniAppUserDao;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.ApplicationArguments;
|
||||
import org.springframework.boot.ApplicationRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
||||
* 当你想要放弃的时候,想想当初你为何开始
|
||||
*
|
||||
* @ClassName: LoginWechatStartUp
|
||||
* @Description: 微信登录
|
||||
* @Author: wanggeng
|
||||
* @Date: 2021/4/9 11:44 上午
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Component
|
||||
public class LoginWechatStartUp implements ApplicationRunner {
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(LoginWechatStartUp.class);
|
||||
@Autowired
|
||||
private IMiniAppUserDao miniAppUserDao;
|
||||
|
||||
@Override
|
||||
public void run(ApplicationArguments args) throws Exception {
|
||||
initTable();
|
||||
}
|
||||
|
||||
/**
|
||||
* 建表
|
||||
*/
|
||||
private void initTable() {
|
||||
LOG.debug("创建 wechat_mini_app_user 表");
|
||||
miniAppUserDao.createTable();
|
||||
}
|
||||
}
|
@ -14,7 +14,7 @@
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>ink.wgink</groupId>
|
||||
<artifactId>common</artifactId>
|
||||
<artifactId>service-user</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
@ -2,6 +2,7 @@ package ink.wgink.module.wechat.controller.official.account;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseController;
|
||||
import ink.wgink.exceptions.ParamsException;
|
||||
import ink.wgink.exceptions.PropertiesException;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.module.wechat.enums.XmlEventTypeEnum;
|
||||
import ink.wgink.module.wechat.enums.XmlMsgTypeEnum;
|
||||
@ -9,6 +10,7 @@ import ink.wgink.module.wechat.pojo.vos.official.account.OfficialAccountUserVO;
|
||||
import ink.wgink.module.wechat.result.OfficialAccountEventResult;
|
||||
import ink.wgink.module.wechat.service.official.account.IOfficialAccountCheckService;
|
||||
import ink.wgink.module.wechat.service.official.account.IOfficialAccountUserService;
|
||||
import ink.wgink.properties.wechat.official.account.OfficialAccountProperties;
|
||||
import ink.wgink.util.xml.XMLUtil;
|
||||
import io.swagger.annotations.Api;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -41,6 +43,8 @@ import java.util.concurrent.CompletableFuture;
|
||||
@RequestMapping(ISystemConstant.WECHAT_PREFIX + "/official/account")
|
||||
public class OfficialAccountWechatController extends DefaultBaseController {
|
||||
|
||||
@Autowired
|
||||
private OfficialAccountProperties officialAccountProperties;
|
||||
@Autowired
|
||||
private IOfficialAccountCheckService officialAccountCheckService;
|
||||
@Autowired
|
||||
@ -48,6 +52,9 @@ public class OfficialAccountWechatController extends DefaultBaseController {
|
||||
|
||||
@RequestMapping("event")
|
||||
public void event(HttpServletRequest request, HttpServletResponse response) throws IOException {
|
||||
if (!officialAccountProperties.getActivate()) {
|
||||
throw new PropertiesException("公众号配置未激活");
|
||||
}
|
||||
// 处理认证
|
||||
if (StringUtils.equalsIgnoreCase(HttpMethod.GET.toString(), request.getMethod())) {
|
||||
officialAccountCheckService.checkSignature(request, response);
|
||||
@ -102,7 +109,9 @@ public class OfficialAccountWechatController extends DefaultBaseController {
|
||||
if (StringUtils.equalsIgnoreCase(XmlEventTypeEnum.SUBSCRIBE.getType(), officialAccountEventResult.getEvent())) {
|
||||
OfficialAccountUserVO officialAccountUserVO = new OfficialAccountUserVO();
|
||||
officialAccountUserVO.setOpenId(officialAccountEventResult.getFromUserName());
|
||||
officialAccountUserService.save(officialAccountUserVO);
|
||||
synchronized (this) {
|
||||
officialAccountUserService.save(officialAccountUserVO);
|
||||
}
|
||||
} else if (StringUtils.equalsIgnoreCase(XmlEventTypeEnum.UNSUBSCRIBE.getType(), officialAccountEventResult.getEvent())) {
|
||||
officialAccountUserService.updateStatus(officialAccountEventResult.getFromUserName(), XmlEventTypeEnum.UNSUBSCRIBE);
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package ink.wgink.login.wechat.dao.user;
|
||||
package ink.wgink.module.wechat.dao.miniapp;
|
||||
|
||||
import ink.wgink.exceptions.SaveException;
|
||||
import ink.wgink.exceptions.SearchException;
|
||||
import ink.wgink.exceptions.UpdateException;
|
||||
import ink.wgink.login.wechat.pojo.pos.user.MiniAppUserPO;
|
||||
import ink.wgink.module.wechat.pojo.pos.miniapp.MiniAppUserPO;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.util.Map;
|
@ -1,4 +1,4 @@
|
||||
package ink.wgink.login.wechat.pojo.bos.user;
|
||||
package ink.wgink.module.wechat.pojo.bos.miniapp;
|
||||
|
||||
/**
|
||||
* When you feel like quitting. Think about why you started
|
@ -1,4 +1,4 @@
|
||||
package ink.wgink.login.wechat.pojo.pos.user;
|
||||
package ink.wgink.module.wechat.pojo.pos.miniapp;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
@ -1,6 +1,7 @@
|
||||
package ink.wgink.login.wechat.service.user;
|
||||
package ink.wgink.module.wechat.service.miniapp;
|
||||
|
||||
import ink.wgink.login.wechat.pojo.pos.user.MiniAppUserPO;
|
||||
|
||||
import ink.wgink.module.wechat.pojo.pos.miniapp.MiniAppUserPO;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@ -16,6 +17,11 @@ import java.util.Map;
|
||||
*/
|
||||
public interface IMiniAppUserService {
|
||||
|
||||
/**
|
||||
* 微信随机用户前缀
|
||||
*/
|
||||
String MINIAPP_RANDOM_USER_PREFIX = "WXM_";
|
||||
|
||||
/**
|
||||
* 创建用户并返回用户ID,已经存在的不操作
|
||||
*
|
@ -1,15 +1,13 @@
|
||||
package ink.wgink.login.wechat.service.user.impl;
|
||||
package ink.wgink.module.wechat.service.miniapp.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.login.wechat.dao.user.IMiniAppUserDao;
|
||||
import ink.wgink.login.wechat.pojo.pos.user.MiniAppUserPO;
|
||||
import ink.wgink.login.wechat.service.sign.IMiniAppSignService;
|
||||
import ink.wgink.login.wechat.service.user.IMiniAppUserService;
|
||||
import ink.wgink.service.user.pojo.pos.UserPO;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.module.wechat.dao.miniapp.IMiniAppUserDao;
|
||||
import ink.wgink.module.wechat.pojo.pos.miniapp.MiniAppUserPO;
|
||||
import ink.wgink.module.wechat.service.miniapp.IMiniAppUserService;
|
||||
import ink.wgink.service.user.pojo.vos.UserVO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import ink.wgink.util.string.WStringUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -30,7 +28,7 @@ import java.util.Map;
|
||||
@Service
|
||||
public class MiniAppUserServiceImpl extends DefaultBaseService implements IMiniAppUserService {
|
||||
|
||||
@Value("${user.default-password:888888}")
|
||||
@Value("${user.default-password:"+ ISystemConstant.DEFAULT_PASSWORD +"}")
|
||||
private String defaultPassword;
|
||||
@Autowired
|
||||
private IMiniAppUserDao miniAppUserDao;
|
||||
@ -47,8 +45,8 @@ public class MiniAppUserServiceImpl extends DefaultBaseService implements IMiniA
|
||||
// 随机字符串
|
||||
String randomUserName = WStringUtil.randomSubStr(openId, 6);
|
||||
UserVO userVO = new UserVO();
|
||||
userVO.setUserUsername(IMiniAppSignService.WECHAT_RANDOM_USER_PREFIX + randomUserName);
|
||||
userVO.setUserName("微信" + randomUserName);
|
||||
userVO.setUserUsername(MINIAPP_RANDOM_USER_PREFIX + randomUserName);
|
||||
userVO.setUserName("微信M" + randomUserName);
|
||||
userVO.setUserPassword(defaultPassword);
|
||||
userVO.setUserState(0);
|
||||
userVO.setUserType(2);
|
@ -23,14 +23,19 @@ import java.util.Map;
|
||||
public interface IOfficialAccountUserService {
|
||||
|
||||
/**
|
||||
* 新增用户
|
||||
* 公众号用户前缀
|
||||
*/
|
||||
String OFFICIAL_ACCOUNT_RANDOM_USER_PREFIX = "WX_";
|
||||
|
||||
/**
|
||||
* 新增用户,用户关注微信公众号时触执行,创建随机账号;如果已经有则,修改订阅状态
|
||||
*
|
||||
* @param officialAccountUserVO
|
||||
*/
|
||||
void save(OfficialAccountUserVO officialAccountUserVO);
|
||||
|
||||
/**
|
||||
* 修改状态
|
||||
* 修改状态,修改订阅状态
|
||||
*
|
||||
* @param openId
|
||||
* @param xmlEventTypeEnum
|
||||
|
@ -1,6 +1,7 @@
|
||||
package ink.wgink.module.wechat.service.official.account.impl;
|
||||
|
||||
import ink.wgink.common.base.DefaultBaseService;
|
||||
import ink.wgink.interfaces.consts.ISystemConstant;
|
||||
import ink.wgink.module.wechat.dao.official.account.IOfficialAccountUserDao;
|
||||
import ink.wgink.module.wechat.enums.XmlEventTypeEnum;
|
||||
import ink.wgink.module.wechat.pojo.dtos.official.account.OfficialAccountUserDTO;
|
||||
@ -10,10 +11,13 @@ import ink.wgink.module.wechat.service.official.account.IOfficialAccountUserServ
|
||||
import ink.wgink.pojo.ListPage;
|
||||
import ink.wgink.pojo.result.SuccessResultList;
|
||||
import ink.wgink.properties.wechat.official.account.OfficialAccountProperties;
|
||||
import ink.wgink.service.user.pojo.vos.UserVO;
|
||||
import ink.wgink.service.user.service.IUserService;
|
||||
import ink.wgink.util.date.DateUtil;
|
||||
import ink.wgink.util.map.HashMapUtil;
|
||||
import ink.wgink.util.string.WStringUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
@ -32,10 +36,14 @@ import java.util.Map;
|
||||
@Service
|
||||
public class OfficialAccountUserServiceImpl extends DefaultBaseService implements IOfficialAccountUserService {
|
||||
|
||||
@Value("${user.default-password:" + ISystemConstant.DEFAULT_PASSWORD + "}")
|
||||
private String defaultPassword;
|
||||
@Autowired
|
||||
private IOfficialAccountUserDao officialAccountUserDao;
|
||||
@Autowired
|
||||
private OfficialAccountProperties officialAccountProperties;
|
||||
@Autowired
|
||||
private IUserService userService;
|
||||
|
||||
@Override
|
||||
public void save(OfficialAccountUserVO officialAccountUserVO) {
|
||||
@ -44,9 +52,24 @@ public class OfficialAccountUserServiceImpl extends DefaultBaseService implement
|
||||
updateStatus(officialAccountUserVO.getOpenId(), XmlEventTypeEnum.SUBSCRIBE);
|
||||
return;
|
||||
}
|
||||
|
||||
// 创建随机用户
|
||||
String openId = officialAccountUserVO.getOpenId();
|
||||
// 随机字符串
|
||||
String randomUserName = WStringUtil.randomSubStr(openId, 6);
|
||||
UserVO userVO = new UserVO();
|
||||
userVO.setUserUsername(OFFICIAL_ACCOUNT_RANDOM_USER_PREFIX + randomUserName);
|
||||
userVO.setUserName("微信" + randomUserName);
|
||||
userVO.setUserPassword(defaultPassword);
|
||||
userVO.setUserState(0);
|
||||
userVO.setUserType(2);
|
||||
String userId = userService.saveAndReturnId(userVO, true);
|
||||
|
||||
String time = DateUtil.getTime();
|
||||
officialAccountUserVO.setAppId(officialAccountProperties.getAppId());
|
||||
// 用户码,用于绑定账号时使用
|
||||
// 绑定用户
|
||||
officialAccountUserVO.setUserId(userId);
|
||||
officialAccountUserVO.setUserCode(WStringUtil.randomSubStr(String.valueOf(System.currentTimeMillis()), 6));
|
||||
// 标记为初始化账号
|
||||
officialAccountUserVO.setIsInitAccount(1);
|
||||
|
@ -1,7 +1,9 @@
|
||||
package ink.wgink.module.wechat.startup;
|
||||
|
||||
import ink.wgink.module.wechat.dao.miniapp.IMiniAppUserDao;
|
||||
import ink.wgink.module.wechat.dao.official.account.IOfficialAccountUserDao;
|
||||
import ink.wgink.module.wechat.manager.OfficialAccountAccessTokenManager;
|
||||
import ink.wgink.properties.wechat.miniapp.MiniAppProperties;
|
||||
import ink.wgink.properties.wechat.official.account.OfficialAccountProperties;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@ -25,8 +27,12 @@ import org.springframework.stereotype.Component;
|
||||
public class WechatStartUp implements ApplicationRunner {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(WechatStartUp.class);
|
||||
@Autowired
|
||||
private MiniAppProperties miniAppProperties;
|
||||
@Autowired
|
||||
private OfficialAccountProperties officialAccountProperties;
|
||||
@Autowired
|
||||
private IMiniAppUserDao miniAppUserDao;
|
||||
@Autowired
|
||||
private IOfficialAccountUserDao officialAccountUserDao;
|
||||
|
||||
@Override
|
||||
@ -35,13 +41,25 @@ public class WechatStartUp implements ApplicationRunner {
|
||||
new Thread(() -> refreshOfficialAccountAccessToken()).start();
|
||||
}
|
||||
|
||||
/**
|
||||
* 建表
|
||||
*/
|
||||
private void initTable() {
|
||||
LOG.debug("创建 wechat_official_account_user 表");
|
||||
officialAccountUserDao.createTable();
|
||||
if (miniAppProperties.getActive()) {
|
||||
LOG.debug("创建 wechat_mini_app_user 表");
|
||||
miniAppUserDao.createTable();
|
||||
}
|
||||
if (officialAccountProperties.getActivate()) {
|
||||
LOG.debug("创建 wechat_official_account_user 表");
|
||||
officialAccountUserDao.createTable();
|
||||
}
|
||||
}
|
||||
|
||||
@Scheduled(cron = "0 0/5 * * * ?")
|
||||
public void refreshOfficialAccountAccessToken() {
|
||||
if (!officialAccountProperties.getActivate()) {
|
||||
return;
|
||||
}
|
||||
OfficialAccountAccessTokenManager.getInstance().refreshAccessToken(officialAccountProperties);
|
||||
}
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="ink.wgink.login.wechat.dao.user.IMiniAppUserDao">
|
||||
<mapper namespace="ink.wgink.module.wechat.dao.miniapp.IMiniAppUserDao">
|
||||
|
||||
<cache flushInterval="3600000"/>
|
||||
|
||||
<resultMap id="miniAppUserPO" type="ink.wgink.login.wechat.pojo.pos.user.MiniAppUserPO">
|
||||
<resultMap id="miniAppUserPO" type="ink.wgink.module.wechat.pojo.pos.miniapp.MiniAppUserPO">
|
||||
<result column="app_id" property="appId"/>
|
||||
<result column="open_id" property="openId"/>
|
||||
<result column="user_id" property="userId"/>
|
@ -74,7 +74,7 @@ public class UserServiceImpl extends DefaultBaseService implements IUserService
|
||||
private IUserAdjustmentService userAdjustmentService;
|
||||
@Autowired
|
||||
private PasswordEncoder passwordEncoder;
|
||||
@Value("${user.default-password:88888888}")
|
||||
@Value("${user.default-password:" + ISystemConstant.DEFAULT_PASSWORD + "}")
|
||||
private String defaultPassword;
|
||||
@Autowired
|
||||
private IFileService fileService;
|
||||
|
Loading…
Reference in New Issue
Block a user