新增token验证,过期,续约

segment2.0
linrf 2 years ago
parent 3f34b0d49c
commit c203f62f9b

@ -50,7 +50,7 @@ public class GlobalResponseBodyAdvice implements ResponseBodyAdvice<Object> {
public Object defaultErrorHandler(HttpServletRequest req, Exception ex) { public Object defaultErrorHandler(HttpServletRequest req, Exception ex) {
if (ex instanceof ApiException) { if (ex instanceof ApiException) {
logger.info("{} 错误 ,code:{}, message:{}", req.getRequestURL(), ((ApiException) ex).getCode(), ex.getMessage()); logger.info("{} 错误 ,code:{}, message:{}", req.getRequestURL(), ((ApiException) ex).getCode(), ex.getMessage());
return CommonResult.failed(ex.getMessage()); return CommonResult.failed(((ApiException) ex).getCode().toString(), ex.getMessage());
} else if (ex instanceof NoHandlerFoundException) { } else if (ex instanceof NoHandlerFoundException) {
logger.info("{} 错误 ,code:{}, message:{}", req.getRequestURL(), 404, ex.getMessage()); logger.info("{} 错误 ,code:{}, message:{}", req.getRequestURL(), 404, ex.getMessage());
} }

@ -1,12 +1,12 @@
package com.docus.server.api.recovery; package com.docus.server.api.recovery;
import com.docus.infrastructure.web.api.CommonResult;
import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.dto.recovery.rcvsysuser.AddRcvSysUserDTO; import com.docus.server.dto.recovery.rcvsysuser.AddRcvSysUserDTO;
import com.docus.server.dto.recovery.rcvsysuser.DeleteRcvSysUserDTO; import com.docus.server.dto.recovery.rcvsysuser.DeleteRcvSysUserDTO;
import com.docus.server.dto.recovery.rcvsysuser.EditRcvSysUserDTO; import com.docus.server.dto.recovery.rcvsysuser.EditRcvSysUserDTO;
import com.docus.server.dto.recovery.rcvsysuser.LoginRcvSysUserDTO; import com.docus.server.dto.recovery.rcvsysuser.LoginRcvSysUserDTO;
import com.docus.server.vo.recovery.UserInfoView;
import com.docus.server.vo.recovery.rcvsysuser.RcvSysUserVO; import com.docus.server.vo.recovery.rcvsysuser.RcvSysUserVO;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
@ -34,10 +34,11 @@ import java.util.List;
public interface RcvSysUserApi { public interface RcvSysUserApi {
/** /**
* *
*
* @return * @return
*/ */
@PostMapping("/login") @PostMapping("/login")
UserInfoView login(@RequestBody LoginRcvSysUserDTO loginRcvSysUserDTO); CommonResult<String> login(@RequestBody LoginRcvSysUserDTO loginRcvSysUserDTO);
/** /**
* 退 * 退

@ -41,18 +41,24 @@ public class TokenInterceptor extends HandlerInterceptorAdapter {
public TokenInterceptor(String tokenHeaderName, String userIdHeaderName, String tokenRedisKeyPrefix) { public TokenInterceptor(String tokenHeaderName, String userIdHeaderName, String tokenRedisKeyPrefix) {
this.tokenHeaderName = tokenHeaderName; this.tokenHeaderName = tokenHeaderName;
this.userIdHeaderName = userIdHeaderName; this.userIdHeaderName = userIdHeaderName;
tokenRedisKeyPrefix = tokenRedisKeyPrefix; this.tokenRedisKeyPrefix = tokenRedisKeyPrefix;
} }
public TokenInterceptor(String tokenHeaderName, String userIdHeaderName, String tokenRedisKeyPrefix, String userIdPropertyName) { public TokenInterceptor(String tokenHeaderName, String userIdHeaderName, String tokenRedisKeyPrefix, String userIdPropertyName) {
this.tokenHeaderName = tokenHeaderName; this.tokenHeaderName = tokenHeaderName;
this.userIdHeaderName = userIdHeaderName; this.userIdHeaderName = userIdHeaderName;
tokenRedisKeyPrefix = tokenRedisKeyPrefix; this.tokenRedisKeyPrefix = tokenRedisKeyPrefix;
this.userIdPropertyName = userIdPropertyName; this.userIdPropertyName = userIdPropertyName;
} }
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String path = request.getRequestURI();
// 跟swagger冲突跳出response包装
if (path.contains("swagger") || path.contains("api-docs") || path.contains("error") || path.contains("/monitor/url-mappings") || path.contains("doc.html")) {
//忽略验证
return super.preHandle(request, response, handler);
}
if (handler instanceof HandlerMethod) { if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler; HandlerMethod handlerMethod = (HandlerMethod) handler;
Class<?> controller = handlerMethod.getMethod().getDeclaringClass(); Class<?> controller = handlerMethod.getMethod().getDeclaringClass();
@ -90,7 +96,7 @@ public class TokenInterceptor extends HandlerInterceptorAdapter {
String headerUserId = request.getHeader(userIdHeaderName); String headerUserId = request.getHeader(userIdHeaderName);
if (!userId.equalsIgnoreCase(headerUserId)) { if (!userId.equalsIgnoreCase(headerUserId)) {
//非法 token , token和userid不匹配 //非法 token , token和userid不匹配
logger.info("token {} is not. match userId {}", token, headerUserId); logger.info("token {} is not match userId {}", token, headerUserId);
throw new ApiException(ExceptionCode.TokenError); throw new ApiException(ExceptionCode.TokenError);
} }
//重置token过期时间 //重置token过期时间

@ -1,5 +1,6 @@
package com.docus.server.controller; package com.docus.server.controller;
import com.docus.infrastructure.web.api.CommonResult;
import com.docus.infrastructure.web.request.SearchDTO; import com.docus.infrastructure.web.request.SearchDTO;
import com.docus.infrastructure.web.response.PageResult; import com.docus.infrastructure.web.response.PageResult;
import com.docus.server.api.recovery.RcvSysUserApi; import com.docus.server.api.recovery.RcvSysUserApi;
@ -9,7 +10,6 @@ import com.docus.server.dto.recovery.rcvsysuser.DeleteRcvSysUserDTO;
import com.docus.server.dto.recovery.rcvsysuser.EditRcvSysUserDTO; import com.docus.server.dto.recovery.rcvsysuser.EditRcvSysUserDTO;
import com.docus.server.dto.recovery.rcvsysuser.LoginRcvSysUserDTO; import com.docus.server.dto.recovery.rcvsysuser.LoginRcvSysUserDTO;
import com.docus.server.service.IRcvSysUserService; import com.docus.server.service.IRcvSysUserService;
import com.docus.server.vo.recovery.UserInfoView;
import com.docus.server.vo.recovery.rcvsysuser.RcvSysUserVO; import com.docus.server.vo.recovery.rcvsysuser.RcvSysUserVO;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
@ -36,11 +36,9 @@ public class RcvSysUserController implements RcvSysUserApi {
@Override @Override
@ApiOperation("登录") @ApiOperation("登录")
@IgnoreValidate @IgnoreValidate
public UserInfoView login(LoginRcvSysUserDTO userDTO) { public CommonResult<String> login(LoginRcvSysUserDTO userDTO) {
String token = iRcvSysUserService.doLogin(userDTO.getUserName(), userDTO.getUserPwd()); String token = iRcvSysUserService.doLogin(userDTO.getUserName(), userDTO.getUserPwd());
UserInfoView userInfoView = new UserInfoView(); return CommonResult.success(token, "登录成功");
userInfoView.setToken(token);
return userInfoView;
} }
@ApiOperation("退出登录") @ApiOperation("退出登录")

@ -354,6 +354,7 @@ public class RcvSysUserServiceImpl implements IRcvSysUserService {
UserInfoView userInfoview = new UserInfoView(); UserInfoView userInfoview = new UserInfoView();
userInfoview.setToken(token); userInfoview.setToken(token);
userInfoview.setUserName(userName); userInfoview.setUserName(userName);
userInfoview.setUserId(userName);
userInfoview.setPassword(userPwd); userInfoview.setPassword(userPwd);
redisStringService.setValue(BusinessConstant.REDIS_KEY_USER_TOKEN_PREFIX + token, userInfoview, 3, TimeUnit.MINUTES); redisStringService.setValue(BusinessConstant.REDIS_KEY_USER_TOKEN_PREFIX + token, userInfoview, 3, TimeUnit.MINUTES);

Loading…
Cancel
Save