From d21e551b42746e5c689c96e584042e418083ff9b Mon Sep 17 00:00:00 2001 From: kaiyu <404897439@qq.com> Date: Thu, 11 Mar 2021 16:06:18 +0800 Subject: [PATCH] tokenUtils更新 --- screen-manage/pom.xml | 5 screen-manage/src/main/resources/application-dev.yml | 4 screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java | 9 + screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java | 16 ++ screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java | 13 ++ screen-common/src/main/java/com/moral/exception/TokenException.java | 72 ++++++++++++ screen-common/src/main/java/com/moral/util/TokenUtils.java | 86 ++++++++------ screen-common/src/main/java/com/moral/constant/Constants.java | 19 +++ screen-manage/src/main/java/com/moral/api/controller/AccountController.java | 30 +++- screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java | 82 ++++++++----- 10 files changed, 259 insertions(+), 77 deletions(-) diff --git a/screen-common/src/main/java/com/moral/constant/Constants.java b/screen-common/src/main/java/com/moral/constant/Constants.java index d824510..945ef27 100644 --- a/screen-common/src/main/java/com/moral/constant/Constants.java +++ b/screen-common/src/main/java/com/moral/constant/Constants.java @@ -15,6 +15,16 @@ */ public static final String MSG_OPERATION_FAILED = "���������������"; + /* + * token������ + * */ + public static final String MSG_TOKEN_ERROR = "token������������������������"; + + /* + * token������������ + * */ + public static final String MSG_TOKEN_CREATE_ERROR = "token���������������������������������"; + /** * ������������code */ @@ -24,6 +34,15 @@ */ public static final int CODE_OPERATION_FAILED = -1; + /** + * token������������ + */ + public static final int CODE_TOKEN_ERROR = -10; + + /* + * token������������ + * */ + public static final int CODE_TOKEN_CREATE_ERROR = -11; } diff --git a/screen-common/src/main/java/com/moral/exception/TokenException.java b/screen-common/src/main/java/com/moral/exception/TokenException.java new file mode 100644 index 0000000..e8bdc1c --- /dev/null +++ b/screen-common/src/main/java/com/moral/exception/TokenException.java @@ -0,0 +1,72 @@ +package com.moral.exception; + +/** + * @ClassName TokenException + * @Description Token������ + * @Author ��������� + * @Date 2021/3/11 14:54 + * @Version TODO + **/ +public class TokenException extends RuntimeException { + + /** + * ��������� + */ + private int code; + + /** + * ������������ + */ + private String msg; + + /** */ + private static final long serialVersionUID = 1L; + + public TokenException() { + super(); + } + + public TokenException(String msg) { + super(msg); + this.msg = msg; + } + + public TokenException(Throwable t) { + super(t); + } + + public TokenException(String msg, Throwable t) { + super(msg); + this.msg = msg; + } + + public TokenException(int code, String msg) { + super(msg); + this.code = code; + this.msg = msg; + } + + public TokenException(int code, String msg, Throwable t) { + super(msg, t); + this.code = code; + this.msg = msg; + } + + /** + * Getter method for property <tt>code</tt>. + * + * @return property value of code + */ + public int getCode() { + return code; + } + + /** + * Getter method for property <tt>msg</tt>. + * + * @return property value of msg + */ + public String getMsg() { + return msg; + } +} diff --git a/screen-common/src/main/java/com/moral/util/TokenUtils.java b/screen-common/src/main/java/com/moral/util/TokenUtils.java index 77d2d17..7900fa2 100644 --- a/screen-common/src/main/java/com/moral/util/TokenUtils.java +++ b/screen-common/src/main/java/com/moral/util/TokenUtils.java @@ -1,5 +1,8 @@ package com.moral.util; +import com.moral.constant.Constants; +import com.moral.exception.TokenException; +import com.sun.org.apache.bcel.internal.classfile.ConstantString; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -31,13 +34,7 @@ } //token��������� ������������ - private static final int validity_time = 60*60*24*7; - //token������,������������ - public static final int error = -1; - //token������ - public static final int timeout = -2; - //token��������������������� - public static final int valid = 1; + private static final int validity_time = 60*30; /** * @Description: ������token @@ -46,69 +43,86 @@ * @Author: ��������� * @Date: 2021/3/10 */ - public static Map<String, Object> getToken(String uid, Map<String, Object> userInfo) { - Map<String, Object> result = new HashMap<>(); + public static String getToken(String uid, Map<String, Object> userInfo) { //������������token try { //������token String token = TokenEncryptUtils.encoded(uid + "/" + System.currentTimeMillis() / 1000); //������������token String oldToken = (String) redisTemplate.opsForHash().get("user_token", uid); - if(oldToken!=null) + if (oldToken != null) redisTemplate.delete(oldToken); //���token���������value��� redisTemplate.opsForValue().set(token, userInfo); redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); //���token���������Hash��� - redisTemplate.opsForHash().put("user_token",uid,token); - - result.put("code", valid); - result.put("token",token); - }catch (Exception e){ - e.printStackTrace(); - log.error(e.getMessage()); - result.put("code",error); + redisTemplate.opsForHash().put("user_token", uid, token); + return token; + } catch (Exception e) { + log.error("token���������������"+e.getMessage()); + throw new TokenException(Constants.CODE_TOKEN_CREATE_ERROR,Constants.MSG_TOKEN_CREATE_ERROR); } - return result; + } /** * @Description: ������token * @Param: [type, token] type��� ���������������manage ���������������api - * @return: java.util.Map<java.lang.String , java.lang.Object> + * @return: java.util.Map<java.lang.String , java.lang.Object> * @Author: ��������� * @Date: 2021/3/10 */ - public static Map<String, Object> checkToken( String token) { - Map<String, Object> result = new HashMap<>(); + public static void checkToken(String token) { try { String[] tokenArray = TokenEncryptUtils.decoded(token).split("/"); //������token������������ if (tokenArray.length != 2) { - result.put("code", error); - result.put("msg", "���������token"); - return result; + throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); } //������token������������ - int tokenTime = Integer.parseInt(tokenArray[1]); - if ((System.currentTimeMillis() / 1000) - tokenTime > validity_time) { - result.put("code", timeout); - result.put("msg", "���������������������������������������"); - return result; + if (!redisTemplate.hasKey(token)) { + throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); } - result.put("code", valid); - return result; } catch (Exception e) { log.error("token���������������token������" + e.getMessage()); - result.put("code", error); - result.put("msg", "���������token"); - return result; + throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); } } - //������token������������������ + /** + * @Description: ������token������������������ + * @Param: [token] + * @return: java.util.Map<java.lang.String , java.lang.Object> + * @Author: ��������� + * @Date: 2021/3/11 + */ public static Map<String, Object> getUserInfoByToken(String token) { Map<String, Object> userInfo = (Map<String, Object>) redisTemplate.opsForValue().get(token); + if(userInfo==null) + throw new TokenException(Constants.CODE_TOKEN_ERROR,Constants.MSG_TOKEN_ERROR); return userInfo; } + + /** + * @Description: ������token + * @Param: [uid, token] + * @return: void + * @Author: ��������� + * @Date: 2021/3/11 + */ + public static void destoryToken(String uid, String token) { + redisTemplate.delete("token"); + redisTemplate.opsForHash().delete("user_token", uid); + } + + /** + * @Description: token������ + * @Param: [token] + * @return: void + * @Author: ��������� + * @Date: 2021/3/11 + */ + public static void extendTokenTime(String token) { + redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); + } } diff --git a/screen-manage/pom.xml b/screen-manage/pom.xml index 165d0b7..2589b24 100644 --- a/screen-manage/pom.xml +++ b/screen-manage/pom.xml @@ -18,6 +18,11 @@ <version>1.0-SNAPSHOT</version> <scope>compile</scope> </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-devtools</artifactId> + <optional>true</optional> + </dependency> </dependencies> <build> diff --git a/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java b/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java index 17dc780..b836014 100644 --- a/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java +++ b/screen-manage/src/main/java/com/moral/api/config/mvc/SpringMVCconfig.java @@ -7,6 +7,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.ArrayList; @@ -34,4 +35,12 @@ regisration.addPathPatterns("/**/**");//������������������ regisration.excludePathPatterns(excludePath);//��������������������� } + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); + registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); + registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); + WebMvcConfigurer.super.addResourceHandlers(registry); + } } diff --git a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java index 5b3ff22..779cea6 100644 --- a/screen-manage/src/main/java/com/moral/api/controller/AccountController.java +++ b/screen-manage/src/main/java/com/moral/api/controller/AccountController.java @@ -3,31 +3,47 @@ import com.moral.api.service.ManageAccountService; import com.moral.constant.ResultMessage; import com.moral.util.ObjectUtils; -import io.netty.util.internal.ObjectUtil; -import io.swagger.annotations.Api; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.util.Map; @Slf4j -@Api(tags = {"������������"}) +@Api(tags = {"������������������"}) @RestController @RequestMapping("/account") public class AccountController { @Resource ManageAccountService accountService; + @Autowired + @Qualifier("tokenRedisTemplate") + RedisTemplate redisTemplate; + @PostMapping("login") - public ResultMessage login(@RequestBody Map<String,Object> paramters){ - if(!ObjectUtils.checkParamAndMap(paramters,"account","password")) - return ResultMessage.fail("���������������"); + public ResultMessage login(@RequestBody Map<String, Object> paramters) { + if (!ObjectUtils.checkParamAndMap(paramters, "account", "password")) + return ResultMessage.fail("���������������"); + Map<String, Object> result = accountService.login(paramters); - if((int)result.get("accountId")<0) + + if ((int) result.get("accountId") < 0) return ResultMessage.fail(result); return ResultMessage.ok(result); } + @PostMapping("logout") + public ResultMessage logout(@RequestBody Map<String, Object> paramters, HttpServletRequest request) { + + return null; + } + + } diff --git a/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java b/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java index b43234f..2e62d5b 100644 --- a/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java +++ b/screen-manage/src/main/java/com/moral/api/exception/GlobalExceptionHandler.java @@ -2,6 +2,7 @@ import com.moral.constant.Constants; import com.moral.constant.ResultMessage; +import com.moral.exception.TokenException; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ControllerAdvice; @@ -22,7 +23,7 @@ @ResponseStatus(HttpStatus.OK) public ResultMessage handleException(Exception ex) { log.error(ex.getMessage()); - log.error(ex.getStackTrace().toString()); + ex.printStackTrace(); return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "������������"); } @@ -36,4 +37,14 @@ return ResultMessage.fail(Constants.CODE_OPERATION_FAILED, "������������������������"); } + /** + * ������TokenException������ + */ + @ExceptionHandler({TokenException.class}) + @ResponseBody + @ResponseStatus(HttpStatus.OK) + public ResultMessage handleTokenException(TokenException ex) { + return ResultMessage.fail(ex.getCode(),ex.getMsg()); + } + } diff --git a/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java b/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java index ad23a22..875edd7 100644 --- a/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java +++ b/screen-manage/src/main/java/com/moral/api/service/ManageAccountService.java @@ -14,5 +14,21 @@ * @since 2021-03-09 */ public interface ManageAccountService extends IService<ManageAccount> { + /** + * @Description: ������������ + * @Param: [paramters] + * @return: java.util.Map<java.lang.String,java.lang.Object> + * @Author: ��������� + * @Date: 2021/3/11 + */ Map<String, Object> login(Map<String, Object> paramters); + + /** + * @Description: ������������ + * @Param: [paramters] + * @return: java.util.Map<java.lang.String,java.lang.Object> + * @Author: ��������� + * @Date: 2021/3/11 + */ + Map<String, Object> logout(Map<String, Object> paramters); } diff --git a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java index b76ddbe..53aee77 100644 --- a/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java +++ b/screen-manage/src/main/java/com/moral/api/service/impl/ManageAccountServiceImpl.java @@ -39,9 +39,16 @@ @Resource ManageMenuMapper manageMenuMapper; - + /** + * @Description: ������ + * @Param: [paramters] + * @return: java.util.Map<java.lang.String , java.lang.Object> + * @Author: ��������� + * @Date: 2021/3/11 + */ + @Override public Map<String, Object> login(Map<String, Object> paramters) { - Map<String,Object> result = new HashMap<>(); + Map<String, Object> result = new HashMap<>(); //������������ String cyrpAccount = (String) paramters.get("account"); String cyrpPassword = (String) paramters.get("password"); @@ -52,59 +59,68 @@ QueryWrapper<ManageAccount> wrapper = new QueryWrapper<>(); wrapper.eq("account", account); ManageAccount manageAccount = accountMapper.selectOne(wrapper); - if(ObjectUtils.isEmpty(manageAccount)){ - result.put("accountId",-1); - result.put("msg","���������������"); + if (ObjectUtils.isEmpty(manageAccount)) { + result.put("accountId", -1); + result.put("msg", "���������������"); return result; } //������������������������ - if(manageAccount.getIsDelete().equals("1")){ - result.put("accountId",-2); - result.put("msg","������������������"); + if (manageAccount.getIsDelete().equals("1")) { + result.put("accountId", -2); + result.put("msg", "������������������"); return result; } //������������ - if(!MD5Utils.saltMD5Verify(password,manageAccount.getPassword())){ - result.put("accountId",-3); - result.put("msg","���������������������"); + if (!MD5Utils.saltMD5Verify(password, manageAccount.getPassword())) { + result.put("accountId", -3); + result.put("msg", "���������������������"); return result; } //������������ List<ManageRole> roles = roleMapper.getManageRoleByAccountId(manageAccount.getId()); - if(ObjectUtils.isEmpty(roles)){ - result.put("accountId",-4); - result.put("msg","������������������������"); + if (ObjectUtils.isEmpty(roles)) { + result.put("accountId", -4); + result.put("msg", "������������������������"); return result; } //������������ List<ManageMenu> menus = manageMenuMapper.getParentChildrenMenusByRoles(roles); - if(ObjectUtils.isEmpty(menus)){ - result.put("accountId",-5); - result.put("msg","������������������������"); + if (ObjectUtils.isEmpty(menus)) { + result.put("accountId", -5); + result.put("msg", "������������������������"); return result; } //������������token,��������������������������������� - Map<String,Object> userInfo = new HashMap<>();//��������������������������������������� - userInfo.put("accountId",manageAccount.getId());//������Id - userInfo.put("userName",manageAccount.getUserName());//������������ - userInfo.put("roles",roles);//������������ - userInfo.put("menus",menus);//������������ - Map<String, Object> tokenResult = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo); - if(tokenResult.get("code").equals(TokenUtils.error)){ - result.put("accountId",-6); - result.put("msg","������token������"); - return result; - } + Map<String, Object> userInfo = new HashMap<>();//��������������������������������������� + userInfo.put("accountId", manageAccount.getId());//������Id + userInfo.put("userName", manageAccount.getUserName());//������������ + userInfo.put("roles", roles);//������������ + userInfo.put("menus", menus);//������������ + String token = TokenUtils.getToken(String.valueOf(manageAccount.getId()), userInfo); + //������������������ - result.put("accountId",manageAccount.getId());//������Id - result.put("userName",manageAccount.getUserName());//������������ - result.put("roles",roles);//������������ - result.put("menus",menus);//������������ - result.put("token",tokenResult.get("token")); + result.put("accountId", manageAccount.getId());//������Id + result.put("userName", manageAccount.getUserName());//������������ + result.put("roles", roles);//������������ + result.put("menus", menus);//������������ + result.put("token", token); return result; } + /** + * @Description: ������ + * @Param: [paramters] + * @return: java.util.Map<java.lang.String , java.lang.Object> + * @Author: ��������� + * @Date: 2021/3/11 + */ + @Override + public Map<String, Object> logout(Map<String, Object> paramters) { + + return null; + } + } diff --git a/screen-manage/src/main/resources/application-dev.yml b/screen-manage/src/main/resources/application-dev.yml index 426aa21..77f43ef 100644 --- a/screen-manage/src/main/resources/application-dev.yml +++ b/screen-manage/src/main/resources/application-dev.yml @@ -114,6 +114,10 @@ interceptor: exclude: - /account/login + - /swagger-ui.html + - /swagger-resources/** + - /webjars/** + - /account/logout AES: KEY: AD42F7787B035B7580000EF93BE20BAD -- Gitblit v1.8.0