登录流程优化
This commit is contained in:
parent
aa1024e491
commit
1f0a579c29
@ -73,6 +73,11 @@
|
|||||||
<artifactId>aliyun-sdk-oss</artifactId>
|
<artifactId>aliyun-sdk-oss</artifactId>
|
||||||
<version>3.10.2</version>
|
<version>3.10.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.jsonwebtoken</groupId>
|
||||||
|
<artifactId>jjwt</artifactId>
|
||||||
|
<version>0.6.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
@ -0,0 +1,94 @@
|
|||||||
|
package com.qiwenshare.common.util;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import io.jsonwebtoken.Claims;
|
||||||
|
import io.jsonwebtoken.JwtBuilder;
|
||||||
|
import io.jsonwebtoken.Jwts;
|
||||||
|
import io.jsonwebtoken.SignatureAlgorithm;
|
||||||
|
import org.apache.commons.net.util.Base64;
|
||||||
|
|
||||||
|
import javax.crypto.SecretKey;
|
||||||
|
import javax.crypto.spec.SecretKeySpec;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class JjwtUtil {
|
||||||
|
|
||||||
|
// jti:jwt的唯一身份标识
|
||||||
|
public static final String JWT_ID = UUID.randomUUID().toString();
|
||||||
|
|
||||||
|
// 加密密文,私钥
|
||||||
|
public static final String JWT_SECRET = "jiamimiwen";
|
||||||
|
|
||||||
|
// 过期时间,单位毫秒
|
||||||
|
public static final int EXPIRE_TIME = 60 * 60 * 1000; // 一个小时
|
||||||
|
// public static final long EXPIRE_TIME = 7 * 24 * 3600 * 1000; // 一个星期
|
||||||
|
|
||||||
|
// 由字符串生成加密key
|
||||||
|
public static SecretKey generalKey() {
|
||||||
|
String secret = JWT_SECRET;
|
||||||
|
// 本地的密码解码
|
||||||
|
byte[] encodedKey = Base64.decodeBase64(JWT_SECRET);
|
||||||
|
// 根据给定的字节数组使用AES加密算法构造一个密钥
|
||||||
|
SecretKey key = new SecretKeySpec(encodedKey, 0, encodedKey.length, "AES");
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建jwt
|
||||||
|
public static String createJWT(String issuer, String audience, String subject) throws Exception {
|
||||||
|
// 设置头部信息
|
||||||
|
// Map<String, Object> header = new HashMap<String, Object>();
|
||||||
|
// header.put("typ", "JWT");
|
||||||
|
// header.put("alg", "HS256");
|
||||||
|
// 或
|
||||||
|
// 指定header那部分签名的时候使用的签名算法,jjwt已经将这部分内容封装好了,只有{"alg":"HS256"}
|
||||||
|
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
|
||||||
|
// 创建payload的私有声明(根据特定的业务需要添加,如果要拿这个做验证,一般是需要和jwt的接收方提前沟通好验证的方式)
|
||||||
|
Map<String, Object> claims = new HashMap<>();
|
||||||
|
claims.put("username", "admin");
|
||||||
|
claims.put("password", "010203");
|
||||||
|
// jti用户id,例如:20da39f8-b74e-4a9b-9a0f-a39f1f73fe64
|
||||||
|
String jwtId = JWT_ID;
|
||||||
|
// 生成JWT的时间
|
||||||
|
long nowTime = System.currentTimeMillis();
|
||||||
|
Date issuedAt = new Date(nowTime);
|
||||||
|
// 生成签名的时候使用的秘钥secret,切记这个秘钥不能外露,是你服务端的私钥,在任何场景都不应该流露出去,一旦客户端得知这个secret,那就意味着客户端是可以自我签发jwt的
|
||||||
|
SecretKey key = generalKey();
|
||||||
|
// 为payload添加各种标准声明和私有声明
|
||||||
|
JwtBuilder builder = Jwts.builder() // 表示new一个JwtBuilder,设置jwt的body
|
||||||
|
// .setHeader(header) // 设置头部信息
|
||||||
|
.setClaims(claims) // 如果有私有声明,一定要先设置自己创建的这个私有声明,这是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明
|
||||||
|
.setId(jwtId) // jti(JWT ID):jwt的唯一身份标识,根据业务需要,可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击
|
||||||
|
.setIssuedAt(issuedAt) // iat(issuedAt):jwt的签发时间
|
||||||
|
.setIssuer(issuer) // iss(issuer):jwt签发者
|
||||||
|
.setSubject(subject) // sub(subject):jwt所面向的用户,放登录的用户名,一个json格式的字符串,可存放userid,roldid之类,作为用户的唯一标志
|
||||||
|
.signWith(signatureAlgorithm, key); // 设置签名,使用的是签名算法和签名使用的秘钥
|
||||||
|
// 设置过期时间
|
||||||
|
long expTime = EXPIRE_TIME;
|
||||||
|
if (expTime >= 0) {
|
||||||
|
long exp = nowTime + expTime;
|
||||||
|
builder.setExpiration(new Date(exp));
|
||||||
|
}
|
||||||
|
// 设置jwt接收者
|
||||||
|
if (audience == null || "".equals(audience)) {
|
||||||
|
builder.setAudience("Tom");
|
||||||
|
} else {
|
||||||
|
builder.setAudience(audience);
|
||||||
|
}
|
||||||
|
return builder.compact();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 解密jwt
|
||||||
|
public static Claims parseJWT(String jwt) throws Exception {
|
||||||
|
SecretKey key = generalKey(); // 签名秘钥,和生成的签名的秘钥一模一样
|
||||||
|
Claims claims = Jwts.parser() // 得到DefaultJwtParser
|
||||||
|
.setSigningKey(key) // 设置签名的秘钥
|
||||||
|
.parseClaimsJws(jwt).getBody(); // 设置需要解析的jwt
|
||||||
|
return claims;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
16
file-common/src/main/resources/rebel.xml
Normal file
16
file-common/src/main/resources/rebel.xml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
|
||||||
|
Refer to https://manuals.jrebel.com/jrebel/standalone/config.html for more information.
|
||||||
|
-->
|
||||||
|
<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_3.xsd">
|
||||||
|
|
||||||
|
<id>file-common</id>
|
||||||
|
|
||||||
|
<classpath>
|
||||||
|
<dir name="E:/workspace/qiwen-file/file-common/target/classes">
|
||||||
|
</dir>
|
||||||
|
</classpath>
|
||||||
|
|
||||||
|
</application>
|
@ -31,10 +31,6 @@
|
|||||||
<groupId>org.springframework.cloud</groupId>
|
<groupId>org.springframework.cloud</groupId>
|
||||||
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>org.springframework.cloud</groupId>-->
|
|
||||||
<!-- <artifactId>spring-cloud-config-client</artifactId>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
@ -10,6 +10,9 @@ import java.util.List;
|
|||||||
|
|
||||||
public interface IUserService extends IService<UserBean> {
|
public interface IUserService extends IService<UserBean> {
|
||||||
|
|
||||||
|
UserBean getUserBeanByToken(String token);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户注册
|
* 用户注册
|
||||||
*
|
*
|
||||||
|
@ -11,6 +11,7 @@ import com.qiwenshare.common.util.PathUtil;
|
|||||||
import com.qiwenshare.file.api.IFileService;
|
import com.qiwenshare.file.api.IFileService;
|
||||||
import com.qiwenshare.file.api.IFiletransferService;
|
import com.qiwenshare.file.api.IFiletransferService;
|
||||||
import com.qiwenshare.file.api.IRemoteUserService;
|
import com.qiwenshare.file.api.IRemoteUserService;
|
||||||
|
import com.qiwenshare.file.api.IUserService;
|
||||||
import com.qiwenshare.file.config.QiwenFileConfig;
|
import com.qiwenshare.file.config.QiwenFileConfig;
|
||||||
import com.qiwenshare.file.domain.FileBean;
|
import com.qiwenshare.file.domain.FileBean;
|
||||||
import com.qiwenshare.file.domain.TreeNode;
|
import com.qiwenshare.file.domain.TreeNode;
|
||||||
@ -33,6 +34,8 @@ public class FileController {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
IFileService fileService;
|
IFileService fileService;
|
||||||
|
@Resource
|
||||||
|
IUserService userService;
|
||||||
@Autowired
|
@Autowired
|
||||||
IRemoteUserService remoteUserService;
|
IRemoteUserService remoteUserService;
|
||||||
@Resource
|
@Resource
|
||||||
@ -58,15 +61,7 @@ public class FileController {
|
|||||||
restResult.setSuccess(false);
|
restResult.setSuccess(false);
|
||||||
return restResult;
|
return restResult;
|
||||||
}
|
}
|
||||||
UserBean sessionUserBean = new UserBean();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
|
|
||||||
fileBean.setUserId(sessionUserBean.getUserId());
|
fileBean.setUserId(sessionUserBean.getUserId());
|
||||||
|
|
||||||
@ -89,15 +84,7 @@ public class FileController {
|
|||||||
if (!operationCheck(token).isSuccess()){
|
if (!operationCheck(token).isSuccess()){
|
||||||
return operationCheck(token);
|
return operationCheck(token);
|
||||||
}
|
}
|
||||||
UserBean sessionUserBean = new UserBean();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||||
fileBean.setUserId(sessionUserBean.getUserId());
|
fileBean.setUserId(sessionUserBean.getUserId());
|
||||||
fileBean.setUploadTime(DateUtil.getCurrentTime());
|
fileBean.setUploadTime(DateUtil.getCurrentTime());
|
||||||
@ -132,16 +119,7 @@ public class FileController {
|
|||||||
if(qiwenFileConfig.isShareMode()){
|
if(qiwenFileConfig.isShareMode()){
|
||||||
fileBean.setUserId(2L);
|
fileBean.setUserId(2L);
|
||||||
}else {
|
}else {
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
UserBean sessionUserBean = new UserBean();
|
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
if (fileBean == null) {
|
if (fileBean == null) {
|
||||||
restResult.setSuccess(false);
|
restResult.setSuccess(false);
|
||||||
return restResult;
|
return restResult;
|
||||||
@ -169,15 +147,7 @@ public class FileController {
|
|||||||
if (!operationCheck(token).isSuccess()) {
|
if (!operationCheck(token).isSuccess()) {
|
||||||
return operationCheck(token);
|
return operationCheck(token);
|
||||||
}
|
}
|
||||||
UserBean sessionUserBean = new UserBean();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
List<FileBean> fileList = JSON.parseArray(fileBean.getFiles(), FileBean.class);
|
List<FileBean> fileList = JSON.parseArray(fileBean.getFiles(), FileBean.class);
|
||||||
|
|
||||||
for (FileBean file : fileList) {
|
for (FileBean file : fileList) {
|
||||||
@ -201,15 +171,7 @@ public class FileController {
|
|||||||
if (!operationCheck(token).isSuccess()){
|
if (!operationCheck(token).isSuccess()){
|
||||||
return JSON.toJSONString(operationCheck(token));
|
return JSON.toJSONString(operationCheck(token));
|
||||||
}
|
}
|
||||||
UserBean sessionUserBean = new UserBean();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
fileService.deleteFile(fileBean, sessionUserBean);
|
fileService.deleteFile(fileBean, sessionUserBean);
|
||||||
|
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
@ -258,16 +220,7 @@ public class FileController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<FileBean> fileBeanList = new ArrayList<>();
|
List<FileBean> fileBeanList = new ArrayList<>();
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
UserBean sessionUserBean = new UserBean();
|
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
for (int i = 0; i < fileEntryNameList.size(); i++){
|
for (int i = 0; i < fileEntryNameList.size(); i++){
|
||||||
String entryName = fileEntryNameList.get(i);
|
String entryName = fileEntryNameList.get(i);
|
||||||
String totalFileUrl = unzipUrl + entryName;
|
String totalFileUrl = unzipUrl + entryName;
|
||||||
@ -356,16 +309,7 @@ public class FileController {
|
|||||||
|
|
||||||
public RestResult<String> operationCheck(String token){
|
public RestResult<String> operationCheck(String token){
|
||||||
RestResult<String> result = new RestResult<String>();
|
RestResult<String> result = new RestResult<String>();
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
UserBean sessionUserBean = new UserBean();
|
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
if (sessionUserBean == null){
|
if (sessionUserBean == null){
|
||||||
result.setSuccess(false);
|
result.setSuccess(false);
|
||||||
result.setErrorMessage("未登录");
|
result.setErrorMessage("未登录");
|
||||||
@ -391,16 +335,7 @@ public class FileController {
|
|||||||
@ResponseBody
|
@ResponseBody
|
||||||
public RestResult<List<FileBean>> selectFileByFileType(FileBean fileBean, @RequestHeader("token") String token) {
|
public RestResult<List<FileBean>> selectFileByFileType(FileBean fileBean, @RequestHeader("token") String token) {
|
||||||
RestResult<List<FileBean>> result = new RestResult<List<FileBean>>();
|
RestResult<List<FileBean>> result = new RestResult<List<FileBean>>();
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
UserBean sessionUserBean = new UserBean();
|
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
long userId = sessionUserBean.getUserId();
|
long userId = sessionUserBean.getUserId();
|
||||||
if (qiwenFileConfig.isShareMode()){
|
if (qiwenFileConfig.isShareMode()){
|
||||||
userId = 2;
|
userId = 2;
|
||||||
@ -420,16 +355,7 @@ public class FileController {
|
|||||||
public RestResult<TreeNode> getFileTree(@RequestHeader("token") String token){
|
public RestResult<TreeNode> getFileTree(@RequestHeader("token") String token){
|
||||||
RestResult<TreeNode> result = new RestResult<TreeNode>();
|
RestResult<TreeNode> result = new RestResult<TreeNode>();
|
||||||
FileBean fileBean = new FileBean();
|
FileBean fileBean = new FileBean();
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
UserBean sessionUserBean = new UserBean();
|
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
if (qiwenFileConfig.isShareMode()){
|
if (qiwenFileConfig.isShareMode()){
|
||||||
fileBean.setUserId(2L);
|
fileBean.setUserId(2L);
|
||||||
}else{
|
}else{
|
||||||
|
@ -11,6 +11,7 @@ import com.qiwenshare.common.operation.ImageOperation;
|
|||||||
import com.qiwenshare.file.api.IFileService;
|
import com.qiwenshare.file.api.IFileService;
|
||||||
import com.qiwenshare.file.api.IFiletransferService;
|
import com.qiwenshare.file.api.IFiletransferService;
|
||||||
import com.qiwenshare.file.api.IRemoteUserService;
|
import com.qiwenshare.file.api.IRemoteUserService;
|
||||||
|
import com.qiwenshare.file.api.IUserService;
|
||||||
import com.qiwenshare.file.config.QiwenFileConfig;
|
import com.qiwenshare.file.config.QiwenFileConfig;
|
||||||
import com.qiwenshare.file.domain.FileBean;
|
import com.qiwenshare.file.domain.FileBean;
|
||||||
import com.qiwenshare.file.domain.StorageBean;
|
import com.qiwenshare.file.domain.StorageBean;
|
||||||
@ -42,6 +43,8 @@ public class FiletransferController {
|
|||||||
QiwenFileConfig qiwenFileConfig;
|
QiwenFileConfig qiwenFileConfig;
|
||||||
@Resource
|
@Resource
|
||||||
IFileService fileService;
|
IFileService fileService;
|
||||||
|
@Resource
|
||||||
|
IUserService userService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 上传文件
|
* 上传文件
|
||||||
@ -53,16 +56,7 @@ public class FiletransferController {
|
|||||||
@ResponseBody
|
@ResponseBody
|
||||||
public String uploadFile(HttpServletRequest request, FileBean fileBean, @RequestHeader("token") String token) {
|
public String uploadFile(HttpServletRequest request, FileBean fileBean, @RequestHeader("token") String token) {
|
||||||
RestResult<String> restResult = new RestResult<String>();
|
RestResult<String> restResult = new RestResult<String>();
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
UserBean sessionUserBean = new UserBean();
|
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
if (sessionUserBean == null){
|
if (sessionUserBean == null){
|
||||||
restResult.setSuccess(false);
|
restResult.setSuccess(false);
|
||||||
restResult.setErrorMessage("未登录");
|
restResult.setErrorMessage("未登录");
|
||||||
@ -175,15 +169,7 @@ public class FiletransferController {
|
|||||||
public RestResult<StorageBean> getStorage(@RequestHeader("token") String token) {
|
public RestResult<StorageBean> getStorage(@RequestHeader("token") String token) {
|
||||||
RestResult<StorageBean> restResult = new RestResult<StorageBean>();
|
RestResult<StorageBean> restResult = new RestResult<StorageBean>();
|
||||||
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
//UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||||
UserBean sessionUserBean = new UserBean();
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
RestResult<UserBean> restUserBean = remoteUserService.checkUserLoginInfo(token);
|
|
||||||
sessionUserBean = restUserBean.getData();
|
|
||||||
} else {
|
|
||||||
sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
}
|
|
||||||
StorageBean storageBean = new StorageBean();
|
StorageBean storageBean = new StorageBean();
|
||||||
if (qiwenFileConfig.isShareMode()){
|
if (qiwenFileConfig.isShareMode()){
|
||||||
storageBean.setUserId(2L);
|
storageBean.setUserId(2L);
|
||||||
|
@ -1,14 +1,21 @@
|
|||||||
package com.qiwenshare.file.controller;
|
package com.qiwenshare.file.controller;
|
||||||
|
|
||||||
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
|
import com.qiwenshare.common.cbb.DateUtil;
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.cbb.RestResult;
|
||||||
import com.qiwenshare.common.domain.AliyunOSS;
|
import com.qiwenshare.common.domain.AliyunOSS;
|
||||||
|
import com.qiwenshare.common.util.JjwtUtil;
|
||||||
import com.qiwenshare.file.api.IRemoteUserService;
|
import com.qiwenshare.file.api.IRemoteUserService;
|
||||||
import com.qiwenshare.file.api.IUserService;
|
import com.qiwenshare.file.api.IUserService;
|
||||||
import com.qiwenshare.file.config.QiwenFileConfig;
|
import com.qiwenshare.file.config.QiwenFileConfig;
|
||||||
import com.qiwenshare.file.domain.UserBean;
|
import com.qiwenshare.file.domain.UserBean;
|
||||||
|
import com.qiwenshare.file.vo.user.UserLoginVo;
|
||||||
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.SecurityUtils;
|
||||||
import org.apache.shiro.authc.UsernamePasswordToken;
|
import org.apache.shiro.authc.UsernamePasswordToken;
|
||||||
|
import org.apache.shiro.crypto.hash.SimpleHash;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@ -24,6 +31,7 @@ import java.util.Map;
|
|||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/user")
|
@RequestMapping("/user")
|
||||||
public class UserController {
|
public class UserController {
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
|
||||||
@Resource
|
@Resource
|
||||||
IUserService userService;
|
IUserService userService;
|
||||||
|
|
||||||
@ -47,12 +55,9 @@ public class UserController {
|
|||||||
@ResponseBody
|
@ResponseBody
|
||||||
public RestResult<String> addUser(@RequestBody UserBean userBean) {
|
public RestResult<String> addUser(@RequestBody UserBean userBean) {
|
||||||
RestResult<String> restResult = null;
|
RestResult<String> restResult = null;
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
restResult = remoteUserService.addUser(userBean);
|
|
||||||
} else {
|
|
||||||
restResult = userService.registerUser(userBean);
|
restResult = userService.registerUser(userBean);
|
||||||
}
|
|
||||||
return restResult;
|
return restResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,28 +69,32 @@ public class UserController {
|
|||||||
*/
|
*/
|
||||||
@RequestMapping("/userlogin")
|
@RequestMapping("/userlogin")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public RestResult<UserBean> userLogin(@RequestBody UserBean userBean) {
|
public RestResult<UserLoginVo> userLogin(@RequestBody UserBean userBean) {
|
||||||
RestResult<UserBean> restResult = new RestResult<UserBean>();
|
RestResult<UserLoginVo> restResult = new RestResult<UserLoginVo>();
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
UserBean saveUserBean = userService.findUserInfoByTelephone(userBean.getUsername());
|
||||||
if (isRemoteLogin) {
|
|
||||||
restResult = remoteUserService.userLogin(userBean);
|
String jwt = "";
|
||||||
} else {
|
|
||||||
restResult.setSuccess(true);
|
|
||||||
try {
|
try {
|
||||||
SecurityUtils.getSubject().login(new UsernamePasswordToken(userBean.getUsername(), userBean.getPassword()));
|
jwt = JjwtUtil.createJWT("qiwenshare", "qiwen", JSON.toJSONString(saveUserBean));
|
||||||
}catch (Exception e){
|
} catch (Exception e) {
|
||||||
|
logger.info("登录失败:{}", e);
|
||||||
restResult.setSuccess(false);
|
restResult.setSuccess(false);
|
||||||
restResult.setErrorMessage("手机号或密码错误!");
|
restResult.setErrorMessage("登录失败!");
|
||||||
|
return restResult;
|
||||||
}
|
}
|
||||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
if (sessionUserBean != null) {
|
String password = new SimpleHash("MD5", userBean.getPassword(), saveUserBean.getSalt(), 1024).toHex();
|
||||||
restResult.setData(sessionUserBean);
|
if (password.equals(saveUserBean.getPassword())) {
|
||||||
|
|
||||||
|
UserLoginVo userLoginVo = new UserLoginVo();
|
||||||
|
BeanUtil.copyProperties(userBean, userLoginVo);
|
||||||
|
userLoginVo.setToken(jwt);
|
||||||
|
restResult.setData(userLoginVo);
|
||||||
restResult.setSuccess(true);
|
restResult.setSuccess(true);
|
||||||
} else {
|
} else {
|
||||||
restResult.setSuccess(false);
|
restResult.setSuccess(false);
|
||||||
restResult.setErrorMessage("手机号或密码错误!");
|
restResult.setErrorMessage("手机号或密码错误!");
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
return restResult;
|
return restResult;
|
||||||
}
|
}
|
||||||
@ -119,29 +128,26 @@ public class UserController {
|
|||||||
@ResponseBody
|
@ResponseBody
|
||||||
public RestResult<UserBean> checkUserLoginInfo(@RequestHeader("token") String token) {
|
public RestResult<UserBean> checkUserLoginInfo(@RequestHeader("token") String token) {
|
||||||
RestResult<UserBean> restResult = new RestResult<UserBean>();
|
RestResult<UserBean> restResult = new RestResult<UserBean>();
|
||||||
boolean isRemoteLogin = qiwenFileConfig.isRemoteLogin();
|
|
||||||
if (isRemoteLogin) {
|
|
||||||
|
|
||||||
restResult = remoteUserService.checkUserLoginInfo(token);
|
UserBean sessionUserBean = userService.getUserBeanByToken(token);
|
||||||
} else {
|
|
||||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
|
||||||
if (sessionUserBean != null) {
|
if (sessionUserBean != null) {
|
||||||
UserBean userInfo = userService.getUserInfoById(sessionUserBean.getUserId());
|
|
||||||
|
|
||||||
restResult.setData(userInfo);
|
|
||||||
|
restResult.setData(sessionUserBean);
|
||||||
restResult.setSuccess(true);
|
restResult.setSuccess(true);
|
||||||
} else {
|
|
||||||
restResult.setSuccess(false);
|
|
||||||
restResult.setErrorMessage("用户暂未登录");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AliyunOSS oss = qiwenFileConfig.getAliyun().getOss();
|
AliyunOSS oss = qiwenFileConfig.getAliyun().getOss();
|
||||||
String domain = oss.getDomain();
|
String domain = oss.getDomain();
|
||||||
restResult.getData().setViewDomain(domain);
|
restResult.getData().setViewDomain(domain);
|
||||||
String bucketName = oss.getBucketName();
|
String bucketName = oss.getBucketName();
|
||||||
String endPoint = oss.getEndpoint();
|
String endPoint = oss.getEndpoint();
|
||||||
restResult.getData().setDownloadDomain(bucketName + "." + endPoint);
|
restResult.getData().setDownloadDomain(bucketName + "." + endPoint);
|
||||||
|
} else {
|
||||||
|
restResult.setSuccess(false);
|
||||||
|
restResult.setErrorMessage("用户暂未登录");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return restResult;
|
return restResult;
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,20 @@
|
|||||||
package com.qiwenshare.file.service;
|
package com.qiwenshare.file.service;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.qiwenshare.common.cbb.DateUtil;
|
import com.qiwenshare.common.cbb.DateUtil;
|
||||||
import com.qiwenshare.common.cbb.RestResult;
|
import com.qiwenshare.common.cbb.RestResult;
|
||||||
import com.qiwenshare.common.domain.TableQueryBean;
|
import com.qiwenshare.common.domain.TableQueryBean;
|
||||||
|
import com.qiwenshare.common.util.JjwtUtil;
|
||||||
import com.qiwenshare.common.util.PasswordUtil;
|
import com.qiwenshare.common.util.PasswordUtil;
|
||||||
import com.qiwenshare.file.api.IUserService;
|
import com.qiwenshare.file.api.IUserService;
|
||||||
import com.qiwenshare.file.controller.UserController;
|
import com.qiwenshare.file.controller.UserController;
|
||||||
import com.qiwenshare.file.domain.UserBean;
|
import com.qiwenshare.file.domain.UserBean;
|
||||||
import com.qiwenshare.file.mapper.UserMapper;
|
import com.qiwenshare.file.mapper.UserMapper;
|
||||||
|
import io.jsonwebtoken.Claims;
|
||||||
import org.apache.shiro.crypto.hash.SimpleHash;
|
import org.apache.shiro.crypto.hash.SimpleHash;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -18,10 +23,39 @@ import java.util.regex.Pattern;
|
|||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class UserService extends ServiceImpl<UserMapper, UserBean> implements IUserService {
|
public class UserService extends ServiceImpl<UserMapper, UserBean> implements IUserService {
|
||||||
//private static final Logger log= Logger.getLogger(EssayService.class);
|
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
|
||||||
@Resource
|
@Resource
|
||||||
UserMapper userMapper;
|
UserMapper userMapper;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserBean getUserBeanByToken(String token){
|
||||||
|
Claims c = null;
|
||||||
|
try {
|
||||||
|
logger.info("token:" + token);
|
||||||
|
c = JjwtUtil.parseJWT(token);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("解码异常");
|
||||||
|
e.printStackTrace();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (c == null) {
|
||||||
|
logger.info("解码为空");
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String subject = c.getSubject();
|
||||||
|
logger.info("解析结果:" + subject);
|
||||||
|
UserBean tokenUserBean = JSON.parseObject(subject, UserBean.class);
|
||||||
|
|
||||||
|
UserBean saveUserBean = findUserInfoByTelephone(tokenUserBean.getTelephone());
|
||||||
|
if (tokenUserBean.getPassword().equals(saveUserBean.getPassword())) {
|
||||||
|
|
||||||
|
return saveUserBean;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户注册
|
* 用户注册
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,51 @@
|
|||||||
|
package com.qiwenshare.file.vo.user;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(name = "用户登录Vo",required = true)
|
||||||
|
public class UserLoginVo {
|
||||||
|
@Schema(description = "用户id", example = "1")
|
||||||
|
private long userId;
|
||||||
|
// @Schema(description = "openId", example = "")
|
||||||
|
// private String openId;
|
||||||
|
@Schema(description = "用户名", example = "奇文网盘")
|
||||||
|
private String username;
|
||||||
|
@Schema(description = "真实名", example = "张三")
|
||||||
|
private String realname;
|
||||||
|
@Schema(description = "qq用户名", example = "水晶之恋")
|
||||||
|
private String qqUsername;
|
||||||
|
@Schema(description = "qq用户头像", example = "https://thirdqq.qlogo.cn/g?b=oidb&k=qxLE4dibR9sic8kS7mHLxlLw&s=100&t=1557468980")
|
||||||
|
private String qqImageUrl;
|
||||||
|
@Schema(description = "手机号", example = "187****1817")
|
||||||
|
private String telephone;
|
||||||
|
@Schema(description = "邮箱", example = "116****483@qq.com")
|
||||||
|
private String email;
|
||||||
|
@Schema(description = "性别", example = "男")
|
||||||
|
private String sex;
|
||||||
|
@Schema(description = "生日", example = "1994-05-06")
|
||||||
|
private String birthday;
|
||||||
|
@Schema(description = "省", example = "陕西省")
|
||||||
|
private String addrProvince;
|
||||||
|
@Schema(description = "市", example = "西安市")
|
||||||
|
private String addrCity;
|
||||||
|
@Schema(description = "区", example = "雁塔区")
|
||||||
|
private String addrArea;
|
||||||
|
@Schema(description = "行业", example = "计算机行业")
|
||||||
|
private String industry;
|
||||||
|
@Schema(description = "职位", example = "java开发")
|
||||||
|
private String position;
|
||||||
|
@Schema(description = "个人介绍", example = "错把陈醋当成墨,写尽半生都是酸")
|
||||||
|
private String intro;
|
||||||
|
@Schema(description = "用户头像地址", example = "\\upload\\20200405\\93811586079860974.png")
|
||||||
|
private String imageUrl;
|
||||||
|
@Schema(description = "注册时间", example = "2019-12-23 14:21:52")
|
||||||
|
private String registerTime;
|
||||||
|
@Schema(description = "最后登录时间", example = "2019-12-23 14:21:52")
|
||||||
|
private String lastLoginTime;
|
||||||
|
@Schema(description = "Token 接口访问凭证")
|
||||||
|
private String token;
|
||||||
|
|
||||||
|
}
|
5
pom.xml
5
pom.xml
@ -52,6 +52,11 @@
|
|||||||
<artifactId>mysql-connector-java</artifactId>
|
<artifactId>mysql-connector-java</artifactId>
|
||||||
<scope>runtime</scope>
|
<scope>runtime</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.hutool</groupId>
|
||||||
|
<artifactId>hutool-all</artifactId>
|
||||||
|
<version>5.3.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!--jpa-->
|
<!--jpa-->
|
||||||
<dependency>
|
<dependency>
|
||||||
|
Loading…
Reference in New Issue
Block a user