记得上下班打卡 | git大法好,push需谨慎

Commit 868e95cf authored by 张国柄's avatar 张国柄

opt:zuul auth filter;

parent 5bbda1e2
...@@ -9,6 +9,8 @@ import com.liquidnet.service.adam.dto.vo.AdamMemberPriceVo; ...@@ -9,6 +9,8 @@ import com.liquidnet.service.adam.dto.vo.AdamMemberPriceVo;
import com.liquidnet.service.adam.entity.AdamMemberPrice; import com.liquidnet.service.adam.entity.AdamMemberPrice;
import com.liquidnet.service.adam.service.admin.IAdamMemberPriceService; import com.liquidnet.service.adam.service.admin.IAdamMemberPriceService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
...@@ -22,15 +24,18 @@ import java.util.List; ...@@ -22,15 +24,18 @@ import java.util.List;
@Api(tags = "后台管理:会员价格") @Api(tags = "后台管理:会员价格")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/admin/member/price") @RequestMapping("admin/member/price")
public class AdamMemberPriceController { public class AdamMemberPriceController {
@Autowired @Autowired
IAdamMemberPriceService adamMemberPriceService; IAdamMemberPriceService adamMemberPriceService;
@ApiOperationSupport(order = 0) @ApiOperationSupport(order = 1)
@ApiOperation(value = "会员价格列表") @ApiOperation(value = "会员价格列表")
@ApiImplicitParams({
@ApiImplicitParam(type = "path", required = true, dataType = "String", name = "memberId", value = "会员卡ID[64]"),
})
@GetMapping("list/{memberId}") @GetMapping("list/{memberId}")
public ResponseDto<Object> list(@PathVariable(name = "memberId") String memberId) { public ResponseDto<Object> list(@PathVariable String memberId) {
List<AdamMemberPrice> list = adamMemberPriceService.list(memberId); List<AdamMemberPrice> list = adamMemberPriceService.list(memberId);
List<AdamMemberPriceVo> adamMemberPriceVos = new ArrayList<>(); List<AdamMemberPriceVo> adamMemberPriceVos = new ArrayList<>();
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
...@@ -44,7 +49,7 @@ public class AdamMemberPriceController { ...@@ -44,7 +49,7 @@ public class AdamMemberPriceController {
return ResponseDto.success(adamMemberPriceVos); return ResponseDto.success(adamMemberPriceVos);
} }
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 2)
@ApiOperation(value = "会员价格详情") @ApiOperation(value = "会员价格详情")
@GetMapping("info/{memberId}/{memberPriceId}") @GetMapping("info/{memberId}/{memberPriceId}")
public ResponseDto<AdamMemberPriceVo> query(@PathVariable(name = "memberId") String memberId, @PathVariable(name = "memberPriceId") String memberPriceId){ public ResponseDto<AdamMemberPriceVo> query(@PathVariable(name = "memberId") String memberId, @PathVariable(name = "memberPriceId") String memberPriceId){
...@@ -52,7 +57,7 @@ public class AdamMemberPriceController { ...@@ -52,7 +57,7 @@ public class AdamMemberPriceController {
return ResponseDto.success(adamMemberPrice); return ResponseDto.success(adamMemberPrice);
} }
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 3)
@ApiOperation(value = "添加会员价格") @ApiOperation(value = "添加会员价格")
@PostMapping("add") @PostMapping("add")
public ResponseDto<Object> add(@RequestBody AdamMemberPriceParam param) { public ResponseDto<Object> add(@RequestBody AdamMemberPriceParam param) {
...@@ -62,7 +67,7 @@ public class AdamMemberPriceController { ...@@ -62,7 +67,7 @@ public class AdamMemberPriceController {
return ResponseDto.success(); return ResponseDto.success();
} }
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 4)
@ApiOperation(value = "编辑会员价格") @ApiOperation(value = "编辑会员价格")
@PostMapping("edit") @PostMapping("edit")
public ResponseDto<Object> edit(@RequestBody AdamMemberPriceParam param) { public ResponseDto<Object> edit(@RequestBody AdamMemberPriceParam param) {
......
...@@ -25,6 +25,8 @@ import org.springframework.data.mongodb.core.convert.MongoConverter; ...@@ -25,6 +25,8 @@ import org.springframework.data.mongodb.core.convert.MongoConverter;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.HashMap; import java.util.HashMap;
...@@ -54,17 +56,16 @@ public class AdamMemberPriceServiceImpl extends ServiceImpl<AdamMemberPriceMappe ...@@ -54,17 +56,16 @@ public class AdamMemberPriceServiceImpl extends ServiceImpl<AdamMemberPriceMappe
} }
@Override @Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void add(AdamMemberPrice info) { public void add(AdamMemberPrice info) {
// mysql // mysql
info.setMemberPriceId(IDGenerator.nextSnowId().toString()); info.setMemberPriceId(IDGenerator.nextSnowId().toString());
info.setCreatedAt(LocalDateTime.now()); info.setCreatedAt(LocalDateTime.now());
info.setUpdatedAt(LocalDateTime.now());
adamMemberPriceMapper.insert(info); adamMemberPriceMapper.insert(info);
// mongo // mongo
AdamMemberPriceVo vo = new AdamMemberPriceVo(); AdamMemberPriceVo vo = new AdamMemberPriceVo();
BeanUtils.copyProperties(info, vo); BeanUtils.copyProperties(info, vo);
vo.setCreatedAt(DateUtil.format(info.getCreatedAt(), DateUtil.Formatter.yyyyMMddHHmmss)); vo.setCreatedAt(DateUtil.format(info.getCreatedAt(), DateUtil.Formatter.yyyyMMddHHmmss));
vo.setUpdatedAt(DateUtil.format(info.getUpdatedAt(), DateUtil.Formatter.yyyyMMddHHmmss));
mongoTemplate.insert(vo, AdamMemberPriceVo.class.getSimpleName()); mongoTemplate.insert(vo, AdamMemberPriceVo.class.getSimpleName());
// redis // redis
...@@ -76,11 +77,14 @@ public class AdamMemberPriceServiceImpl extends ServiceImpl<AdamMemberPriceMappe ...@@ -76,11 +77,14 @@ public class AdamMemberPriceServiceImpl extends ServiceImpl<AdamMemberPriceMappe
AdamMemberPriceVo priceVo = (AdamMemberPriceVo) redisUtil.hget(AdamRedisConst.INFO_MEMBERS_PRICE_INFO.concat(memberId), memberPriceId); AdamMemberPriceVo priceVo = (AdamMemberPriceVo) redisUtil.hget(AdamRedisConst.INFO_MEMBERS_PRICE_INFO.concat(memberId), memberPriceId);
if (null == priceVo) { if (null == priceVo) {
priceVo = mongoTemplate.findOne(Query.query(Criteria.where("memberPriceId").is(memberPriceId)), AdamMemberPriceVo.class, AdamMemberPriceVo.class.getSimpleName()); priceVo = mongoTemplate.findOne(Query.query(Criteria.where("memberPriceId").is(memberPriceId)), AdamMemberPriceVo.class, AdamMemberPriceVo.class.getSimpleName());
if (null != priceVo) redisUtil.hset(AdamRedisConst.INFO_MEMBERS_PRICE_INFO.concat(memberId), memberPriceId, priceVo);
} }
return priceVo; return priceVo;
} }
@Override @Override
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public boolean edit(AdamMemberPrice info) { public boolean edit(AdamMemberPrice info) {
try { try {
String memberPriceId = info.getMemberPriceId(); String memberPriceId = info.getMemberPriceId();
......
...@@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; ...@@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import java.util.Map;
@Slf4j @Slf4j
@Component @Component
...@@ -32,6 +33,7 @@ public class GlobalAuthFilter extends ZuulFilter { ...@@ -32,6 +33,7 @@ public class GlobalAuthFilter extends ZuulFilter {
private List<String> excludeUrlPattern; private List<String> excludeUrlPattern;
private static final String CONTENT_TYPE = "application/json;charset=utf-8"; private static final String CONTENT_TYPE = "application/json;charset=utf-8";
private static final String AUTHORIZATION = "authorization"; private static final String AUTHORIZATION = "authorization";
private static final String TOKEN_STATUS = "token_status";
private static final String TOKEN_ILLEGAL = "40001"; private static final String TOKEN_ILLEGAL = "40001";
private static final String TOKEN_KICK = "40002"; private static final String TOKEN_KICK = "40002";
private static final String TOKEN_INVALID = "40003"; private static final String TOKEN_INVALID = "40003";
...@@ -54,7 +56,28 @@ public class GlobalAuthFilter extends ZuulFilter { ...@@ -54,7 +56,28 @@ public class GlobalAuthFilter extends ZuulFilter {
@Override @Override
public boolean shouldFilter() { public boolean shouldFilter() {
RequestContext ctx = RequestContext.getCurrentContext(); RequestContext ctx = RequestContext.getCurrentContext();
String requestURI = ctx.getRequest().getRequestURI();
HttpServletRequest ctxRequest = ctx.getRequest();
String authorization = ctxRequest.getHeader(AUTHORIZATION);
if (StringUtils.isNotBlank(authorization) && StringUtils.length(authorization) > 7) {
String token = authorization.substring(7);
try {
// 解析没有异常则表示token验证通过,如有必要可根据自身需求增加验证逻辑
Claims claims = jwtValidator.parse(token);
ctx.addZuulRequestHeader(CurrentUtil.uID, (String) claims.get(CurrentUtil.uID));
ctx.addZuulRequestHeader(CurrentUtil.uTag, JsonUtils.toJson(claims));
} catch (ExpiredJwtException expiredJwtEx) {
ctx.addZuulRequestHeader(TOKEN_STATUS, TOKEN_INVALID);
} catch (Exception ex) {
ctx.addZuulRequestHeader(TOKEN_STATUS, TOKEN_ILLEGAL);
}
ctx.addZuulRequestHeader(CurrentUtil.uToken, token);
}
String requestURI = ctxRequest.getRequestURI();
if (excludeUrl.contains(requestURI)) { if (excludeUrl.contains(requestURI)) {
return false; return false;
...@@ -67,50 +90,39 @@ public class GlobalAuthFilter extends ZuulFilter { ...@@ -67,50 +90,39 @@ public class GlobalAuthFilter extends ZuulFilter {
@Override @Override
public Object run() { public Object run() {
RequestContext requestContext = RequestContext.getCurrentContext(); RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest httpServletRequest = requestContext.getRequest();
String authorization = httpServletRequest.getHeader(AUTHORIZATION);
try {
log.info("headers:{}", JsonUtils.toJson(httpServletRequest.getHeaderNames()));
log.info("authorization:{}", authorization);
if (StringUtils.isBlank(authorization)) {
respHandler(requestContext, TOKEN_ILLEGAL); Map<String, String> zuulRequestHeaders = ctx.getZuulRequestHeaders();
} else {
String token = authorization.substring(7);
// 解析没有异常则表示token验证通过,如有必要可根据自身需求增加验证逻辑 String uToken = zuulRequestHeaders.get(CurrentUtil.uToken);
Claims claims = jwtValidator.parse(token);
String uid = (String) claims.get("uid"); log.info("headers:{}", JsonUtils.toJson(ctx.getRequest().getHeaderNames()));
log.info("uToken:{}", uToken);
String ssoKey = jwtValidator.getSsoRedisKey().concat(uid).concat(DigestUtils.md5DigestAsHex(token.getBytes(StandardCharsets.UTF_8))); if (StringUtils.isEmpty(uToken)) {
respHandler(ctx, TOKEN_ILLEGAL);
} else {
String uid = zuulRequestHeaders.get(CurrentUtil.uID);
if (redisUtil.hasKey(ssoKey)) { if (StringUtils.isEmpty(uid)) {
if ((boolean) redisUtil.get(ssoKey)) { respHandler(ctx, zuulRequestHeaders.get(TOKEN_STATUS));
requestContext.setSendZuulResponse(true); } else {
String ssoKey = jwtValidator.getSsoRedisKey().concat(uid)
.concat(DigestUtils.md5DigestAsHex(uToken.getBytes(StandardCharsets.UTF_8)));
// requestContext.addZuulRequestHeader("uid", claims.get("uid").toString()); if (redisUtil.hasKey(ssoKey)) {// 是否存在SSO
requestContext.addZuulRequestHeader(CurrentUtil.uTag, JsonUtils.toJson(claims)); if ((boolean) redisUtil.get(ssoKey)) {// 是否在线
requestContext.addZuulRequestHeader(CurrentUtil.uToken, token); ctx.setSendZuulResponse(true);
} else { } else {
respHandler(requestContext, TOKEN_INVALID);
respHandler(ctx, TOKEN_INVALID);
} }
} else { } else {
respHandler(requestContext, TOKEN_KICK); respHandler(ctx, TOKEN_KICK);
} }
} }
} catch (ExpiredJwtException expiredJwtEx) {
log.error("TOKEN已过期:{}", authorization);
respHandler(requestContext, TOKEN_INVALID);
} catch (Exception ex) {
log.error("TOKEN验证失败:{}", authorization);
respHandler(requestContext, TOKEN_ILLEGAL);
} }
return null; return null;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment