/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.wms.studio.service;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.dubbo.common.json.JSON;
import com.wms.studio.annotations.HandlerPoint;
import com.wms.studio.api.constant.EmailConstant;
import com.wms.studio.api.constant.LoginType;
import com.wms.studio.api.constant.UserConstant;
import com.wms.studio.api.constant.UserDisableReason;
import com.wms.studio.api.constant.UserRole;
import com.wms.studio.api.dto.CommonResponseDto;
import com.wms.studio.api.dto.MailMessage;
import com.wms.studio.api.dto.PageDto;
import com.wms.studio.api.dto.WallpaperDto;
import com.wms.studio.api.dto.page.PageSize;
import com.wms.studio.api.dto.sort.SortDto;
import com.wms.studio.api.dto.user.CheckEmailDto;
import com.wms.studio.api.dto.user.UpdateUserDto;
import com.wms.studio.api.dto.user.UserDto;
import com.wms.studio.api.dto.user.UserInfoDto;
import com.wms.studio.api.dto.user.UserLoginDto;
import com.wms.studio.api.service.MailService;
import com.wms.studio.api.service.UserService;
import com.wms.studio.api.utils.StringUtils;
import com.wms.studio.covert.EntityConvertInterface;
import com.wms.studio.entity.LoginIp;
import com.wms.studio.entity.User;
import com.wms.studio.entity.Wallpaper;
import com.wms.studio.exception.VerificationException;
import com.wms.studio.repository.LoginIpRepository;
import com.wms.studio.repository.UserRepository;
import com.wms.studio.repository.WallpaperRepository;
import com.wms.studio.security.utils.Cryptos;
import com.wms.studio.security.utils.Digests;
import com.wms.studio.service.user.UserMailHandler;
import com.wms.studio.service.user.UserMailHandlerFactoryBean;
import com.wms.studio.utils.Encodes;
import com.wms.studio.utils.SortUtils;
/**
* 发送邮件的信息组装和验证邮件的逻辑可以通过抽离出来,但是因为时间关系,这儿暂时不进行修改,将验证逻辑使用处理类进行处理
*
* @author WMS
*
*/
@Service("userService")
public class UserServiceImpl implements UserService {
private static final Logger log = Logger.getLogger(UserServiceImpl.class);
@Resource
private UserRepository userRepository;
@Resource
private LoginIpRepository loginIpRepository;
@Resource
private WallpaperRepository wallpaperRepository;
@Resource
private MailService mailService;
@Resource
private UserMailHandlerFactoryBean handler;
@Value("#{props['system.mailSalt']}")
private String mailSalt;
@Resource
@Qualifier("userInfoCovert")
private EntityConvertInterface<User, UserInfoDto> userInfoCovert;
public void setWallpaperRepository(WallpaperRepository wallpaperRepository) {
this.wallpaperRepository = wallpaperRepository;
}
public void setLoginIpRepository(LoginIpRepository loginIpRepository) {
this.loginIpRepository = loginIpRepository;
}
public void setMailSalt(String mailSalt) {
this.mailSalt = mailSalt;
}
public void setMailService(MailService mailService) {
this.mailService = mailService;
}
public void setUserRepository(UserRepository userRepository) {
this.userRepository = userRepository;
}
public void setHandler(UserMailHandlerFactoryBean handler) {
this.handler = handler;
}
public void setUserInfoCovert(
EntityConvertInterface<User, UserInfoDto> userInfoCovert) {
this.userInfoCovert = userInfoCovert;
}
/**
* 设定安全的密码,生成随机的salt并经过1024次 sha-1 hash
*/
public void entryptPassword(User user) {
byte[] salt = Digests.generateSalt(UserConstant.SALT_SIZE);
user.setSalt(Encodes.encodeHex(salt));
byte[] hashPassword = Digests.sha1(user.getPassword().getBytes(), salt,
UserConstant.HASH_INTERATIONS);
user.setPassword(Encodes.encodeHex(hashPassword));
}
public String entryptPassword(String password, String saltString) {
byte[] salt = Encodes.decodeHex(saltString);
byte[] hashPassword = Digests.sha1(password.getBytes(), salt,
UserConstant.HASH_INTERATIONS);
return Encodes.encodeHex(hashPassword);
}
@Transactional
@HandlerPoint(handlerName = "registerUserHandler")
public CommonResponseDto registerUser(UserDto userDto) {
CommonResponseDto responseDto = new CommonResponseDto(
UserConstant.ERROR);
try {
if (userDto == null) {
log.info("[注册用户]-[校验参数]-[UserDto不允许为空]");
throw new VerificationException("参数校验错误");
}
if (!StringUtils.isLengthValid(userDto.getId(),
UserConstant.USER_ID_MIN_LENGTH,
UserConstant.USER_ID_MAX_LENGTH)) {
log.info("[注册用户]-[校验用户账号参数]-[用户账号参数不合法]");
throw new VerificationException("用户账号参数不合法");
}
if (!StringUtils.isLengthValid(userDto.getName(),
UserConstant.USER_NAME_MIN_LENGTH,
UserConstant.USER_NAME_MAX_LENGTH)) {
log.info("[注册用户]-[校验用户姓名参数]-[用户姓名参数不合法]");
throw new VerificationException("用户姓名参数不合法");
}
if (!StringUtils.isLengthValid(userDto.getPassword(),
UserConstant.USER_PASSWORD_MIN_LENGTH,
UserConstant.USER_PASSWORD_MAX_LENGTH)) {
log.info("[注册用户]-[校验密码参数]-[密码参数不合法]");
throw new VerificationException("密码参数不合法");
}
/*
* if (!StringUtils.checkEmail(userDto.getEmail())) {
* log.info("[注册用户]-[校验注册邮箱参数]-[注册邮箱参数不合法]"); throw new
* VerificationException("注册邮箱参数不合法"); }
*/
CommonResponseDto emailValid = isValidEmail(userDto.getEmail());
if (UserConstant.SUCCESS != emailValid.getResult()) {
return emailValid;
}
if (userRepository.exists(userDto.getId())) {
log.info("[注册用户]-[校验用户账号]-[用户账号已经被注册]");
throw new VerificationException("用户账号已经被注册");
}
User user = new User();
user.setId(userDto.getId());
user.setName(userDto.getName());
user.setPassword(userDto.getPassword());
user.setEmail(userDto.getEmail());
user.setRole(userDto.getRole());
entryptPassword(user);
responseDto.setResult(UserConstant.SUCCESS);
userRepository.save(user);
LoginIp loginIp = new LoginIp(user, userDto.getRegisterAddress(),
LoginType.注册);
loginIpRepository.save(loginIp);
} catch (VerificationException e) {
responseDto.setErrorMessage(e.getMessage());
}
return responseDto;
}
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public CommonResponseDto isValidEmail(String email) {
CommonResponseDto responseDto = new CommonResponseDto(
UserConstant.ERROR);
try {
if (!StringUtils.checkEmail(email)) {
log.info("[校验邮箱]-[校验邮箱参数]-[邮箱参数不合法]");
throw new VerificationException("邮箱参数不合法");
}
boolean isValid = userRepository.existsByEmail(email).intValue() == 1;
if (isValid) {
log.info("[校验邮箱]-[邮箱已经被注册]");
responseDto.setResult(UserConstant.EMAIL_INVALID);
throw new
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
系统项目结构 系统整个是一个Maven项目,包含三个子项目,分别是:Server-API、Server、Client。其中Server-API主要包含一些基本工具类和服务接口等,Server主要是业务逻辑和数据持久化,Client主要是WEB服务,处理web请求。详细介绍参考:https://blog.csdn.net/newlw/article/details/130699258
资源推荐
资源详情
资源评论
收起资源包目录
基于Java实现的分布式桌面化多媒体共享平台.zip (6449个子文件)
dubbo-monitor-simple.log.2015-05-05 77KB
index.apt 275B
start.bat 874B
start.bat 794B
start.bat 778B
consumer.max.concurrent 616B
provider.concurrent 616B
provider.max.concurrent 616B
consumer.concurrent 616B
consumer.max.concurrent 616B
consumer.concurrent 616B
provider.max.concurrent 616B
provider.concurrent 616B
provider.max.concurrent 616B
consumer.concurrent 616B
provider.concurrent 616B
consumer.max.concurrent 616B
provider.max.concurrent 616B
consumer.max.concurrent 616B
provider.concurrent 616B
consumer.concurrent 616B
consumer.concurrent 616B
provider.concurrent 616B
consumer.max.concurrent 616B
provider.max.concurrent 616B
consumer.max.concurrent 616B
provider.concurrent 616B
consumer.concurrent 616B
provider.max.concurrent 616B
provider.max.concurrent 616B
consumer.max.concurrent 616B
provider.concurrent 616B
consumer.concurrent 616B
provider.max.concurrent 609B
consumer.max.concurrent 609B
consumer.concurrent 609B
provider.concurrent 609B
consumer.max.concurrent 609B
provider.max.concurrent 609B
consumer.concurrent 609B
provider.concurrent 609B
provider.max.concurrent 609B
consumer.max.concurrent 609B
consumer.concurrent 609B
provider.concurrent 609B
consumer.max.concurrent 609B
provider.max.concurrent 609B
consumer.concurrent 609B
provider.concurrent 609B
provider.max.concurrent 609B
consumer.max.concurrent 609B
consumer.concurrent 609B
provider.concurrent 609B
provider.max.concurrent 602B
consumer.max.concurrent 602B
provider.concurrent 602B
consumer.concurrent 602B
consumer.concurrent 602B
provider.concurrent 602B
provider.max.concurrent 602B
consumer.max.concurrent 602B
consumer.max.concurrent 602B
provider.max.concurrent 602B
consumer.concurrent 602B
provider.concurrent 602B
consumer.max.concurrent 525B
provider.max.concurrent 525B
consumer.concurrent 525B
provider.concurrent 525B
provider.max.concurrent 35B
consumer.max.concurrent 35B
consumer.concurrent 35B
provider.concurrent 35B
wms.conf 13KB
ext-theme-neptune-all.css 316KB
ext-theme-neptune-all.css 316KB
ext-theme-classic-all.css 271KB
ext-theme-classic-all.css 271KB
ext-theme-gray-all.css 263KB
ext-theme-gray-all.css 263KB
ext-theme-access-all.css 256KB
ext-theme-access-all.css 256KB
bootstrap.css 121KB
bootstrap.css 101KB
animate.css 62KB
stilearn.css 62KB
animate.css 48KB
stilearn.css 48KB
stilearn-helper.css 30KB
font-awesome.css 28KB
stilearn-helper.css 25KB
font-awesome.min.css 23KB
font-awesome.min.css 23KB
font-awesome.css 23KB
bootstrap-responsive.css 21KB
bootstrap-responsive.css 16KB
font-awesome.css 15KB
uniform.default.css 10KB
desktop.css 10KB
font-awesome.css 10KB
共 6449 条
- 1
- 2
- 3
- 4
- 5
- 6
- 65
资源评论
shejizuopin
- 粉丝: 9539
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功