发表于: 2018-03-18 23:49:35
3 661
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
完成了常用工具类的编写.
腾讯COS云存储FileUtil
package com.ptteng.polyFinance.lgd.utils;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.exception.CosServiceException;
import com.qcloud.cos.http.HttpMethodName;
import com.qcloud.cos.model.GeneratePresignedUrlRequest;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;
import org.apache.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.UUID;
/**
* @author lujing
* Create_at 2018/3/17 9:54
*/
public class FilesUtil {
private static final Logger logger = Logger.getLogger(FilesUtil.class);
// 1 初始化用户身份信息(secretId, secretKey)
static COSCredentials cred = new BasicCOSCredentials("AKID1wskR7t8MPI1kNuj9ayDH8nGcophKwHQ", "DID6pMkw9RL8mHepobGm6KPL5i9RvIWY");
// 2 设置bucket的区域, COS地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
static ClientConfig clientConfig = new ClientConfig(new Region("ap-chengdu"));
// 3 生成cos客户端
static COSClient cosClient = new COSClient(cred, clientConfig);
// bucket的命名规则为{name}-{appid} ,此处填写的存储桶名称必须为此格式
static String bucketName = "lujing0613-1255932852";
//服务器根目录
static String rootPATH = "https://lujing0613-1255932852.cos.ap-chengdu.myqcloud.com/";
/**
* @param picFile springmvc上传的图片流
* @return 云储存路径(非访问路径)
* @throws IOException
*/
public static String upLoadFile(MultipartFile picFile) throws IOException {
if (picFile != null) {
//获得文件的原始名字
String originalFileName = picFile.getOriginalFilename();
//新的文件名称=uuid+原始名字的后缀.xxx
String newFlieName = UUID.randomUUID() + originalFileName.substring(originalFileName.indexOf("."));
//储存地址
String key = "student/" + newFlieName;
//将MultipartFile转换为file.
try {
//创建一个临时文件
File temp = File.createTempFile("temp", null);
//将MultipartFile 写入临时文件
picFile.transferTo(temp);
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, temp);
cosClient.putObject(putObjectRequest);
logger.info("成功:上传地址:" + key);
temp.delete();
temp.deleteOnExit();
cosClient.shutdown();
return key;
} catch (IOException e) {
e.printStackTrace();
logger.info("......图片上传失败");
}
}
return null;
}
/**
* @param file 普通的文件流
* @return 云储存路径(非访问路径)
* @throws IOException
*/
public static String upLoadFile(File file) throws IOException {
//获得文件的原始名字
String originalFileName = file.getName();
//新的文件名称=uuid+原始名字的后缀.xxx
String newFlieName = UUID.randomUUID() + originalFileName.substring(originalFileName.indexOf("."));
//储存地址
String key = "student/" + newFlieName;
PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, file);
cosClient.putObject(putObjectRequest);
cosClient.shutdown();
return key;
}
/**
* @param FilePath 数据库储存路径
* @throws CosServiceException
*/
public static void deleteObject(String FilePath) throws CosServiceException {
// //处理字符串,去掉 rootPATH
// String cosPath = oldFilePath.replace(rootPATH, "");
cosClient.deleteObject(bucketName, FilePath);
cosClient.shutdown();
}
public static String getUrl(String FilePath) {
//处理字符串,去掉 rootPATH
// String cosPath = oldFilePath.replace(rootPATH, "");
String key = FilePath;
GeneratePresignedUrlRequest req =
new GeneratePresignedUrlRequest(bucketName, key, HttpMethodName.GET);
Date expirationDate = new Date(System.currentTimeMillis() + 30 * 60 * 1000);
req.setExpiration(expirationDate);
URL downloadUrl = cosClient.generatePresignedUrl(req);
String downloadUrlStr = downloadUrl.toString();
return downloadUrlStr;
}
}
jwt加密工具 JwtUtils
package com.ptteng.polyFinance.lgd.utils;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
/**
* @author lujing
* Create_at 2018/1/6 13:37
*/
public class JwtUtils {
/**
* @param siginKey 签名部分生成的密钥
* @param subject 需要加密的部分
* @param TtlMillis 过期时间(毫秒)
* @return 生成的一个TOKEN字符串
*/
public static String generateToken(String siginKey, String subject, Long TtlMillis) {
long nowMillis = System.currentTimeMillis();
Date now = new Date(nowMillis);
Date exp = new Date(nowMillis + TtlMillis);
JwtBuilder builder = Jwts.builder();
builder.setSubject(subject);
builder.setIssuedAt(now);
builder.signWith(SignatureAlgorithm.HS256, siginKey);
builder.setExpiration(exp);
return builder.compact();
}
/**
* 解密token得到subject
*
* @param token cookie中的token
* @param siginKey 签名密钥
* @return
*/
public static String getSubject(String token, String siginKey) {
if (null == token) {
return null;
}
//根据token得到被加密的subject
String subject = Jwts.parser().setSigningKey(siginKey).parseClaimsJws(token).getBody().getSubject();
return subject;
}
}
加密工具,SecureUtil:
package com.ptteng.polyFinance.lgd.utils;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Random;
/**
* @author lujing
* Create_at 2018/3/18 13:57
*/
public class SecureUtil {
/**
* @return 长度20的盐值
*/
public static String getSalt() {
Random random = new SecureRandom();
byte[] key = new byte[10];
random.nextBytes(key);
return byteToString(key);
}
public static void main(String[] args) {
// System.out.println(getSalt());
System.out.println(messageDigest("1234"));
}
/**
* 将字节数组转换为固定长度字符串
*
* @param bytes 字节数组
* @return
*/
public static String byteToString(byte[] bytes) {
StringBuffer buffer = new StringBuffer();
for (byte aByte : bytes) {
String temp = Integer.toHexString(aByte & 0xff);
buffer.append(temp);
}
return buffer.toString();
}
/**
* 加密字符串
*
* @param message 待加密的密文
* @return 加密后密文
*/
public static String messageDigest(String message) {
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-256");
byte[] digest = md.digest(message.getBytes("GBK"));
return byteToString(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
}
短信工具SMSUtil
package com.ptteng.polyFinance.lgd.utils;
import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import com.github.qcloudsms.SmsVoiceVerifyCodeSender;
import com.github.qcloudsms.SmsVoiceVerifyCodeSenderResult;
import java.util.ArrayList;
/**
* @author lujing
* Create_at 2018/3/17 11:47
*/
public class SMSutil {
/**
* 用于发送短信验证码,已通过测试.
* @param code 6位随机生成的验证码.
* @param phoneNum 手机号码.
*/
public static void sendSms(String code,String phoneNum) {
//假设短信模板 id 为 123,模板内容为:测试短信,{1},{2},{3},上学。
SmsSingleSender sender = null;
try {
sender = new SmsSingleSender(1400064448, "52f2139dcae50b8973e72c884652b808");
ArrayList<String> params = new ArrayList<String>();
params.add(code);
params.add("15");
SmsSingleSenderResult result = sender.sendWithParam("86", phoneNum, 96383, params, "", "", "");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用于发送语音验证码(不过因为权限原因,个人用户无法使用,所以弃用.)
* @param code 6位数验证码
* @param phoneNum 手机号码
*/
public static void sendVoiceSms(String code,String phoneNum){
//语音验证码发送
SmsVoiceVerifyCodeSender smsVoiceVerifyCodeSender = new SmsVoiceVerifyCodeSender(1400064448, "52f2139dcae50b8973e72c884652b808");
SmsVoiceVerifyCodeSenderResult smsVoiceVerifyCodeSenderResult = null;
try {
smsVoiceVerifyCodeSenderResult = smsVoiceVerifyCodeSender.send("86",
phoneNum, code,2,"");
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(smsVoiceVerifyCodeSenderResult);
}
public static void main(String[] args) {
// sendSms("123456","18008082290");
sendVoiceSms("123456","18008082290");
}
}
明天计划的事情:(一定要写非常细致的内容)
进行前台登陆和后台登陆的操作.
遇到的问题:(遇到什么困难,怎么解决的)
语音验证无法使用.
收获:(通过今天的学习,学到了什么知识)
将任务过程中学习的东西运用到了代码里.
评论