前言
1、Tocken注解
package com.duodian.youhui.admin.config.token.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 校验用户token
* 可以用于class 或者 method
* 如果在method和class都有,则以method的为准。
* @author HealerJean
*/
@Target(value = {ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Token {
/**
* 是否校验token
* @return
*/
boolean check() default true;
}
2、用户登录保存Token
@GetMapping( value = "/web//redirect",produces="application/json;charset=utf-8")
@ResponseBody
public ResponseBean authorizeRedirect(String code,Long fuWuBusinessNoId,Long dingYueBusinessNoId,String scope,Long userInfoPId){
try {
return ResponseBean.buildSuccess(userInfoService.loginToken(fuWuBusinessNoId,dingYueBusinessNoId,code,scope,userInfoPId));
} catch (AppException e) {
ExceptionLogUtils.log(e, this.getClass());
return ResponseBean.buildFailure(e.getCode(),e.getMessage());
} catch (Exception e) {
ExceptionLogUtils.log(e, this.getClass());
return ResponseBean.buildFailure(e.getMessage());
}
}
service中
/**
* 用户登录返回Token,之后利用拦截器中的toke
* 获取用户当前上下文中的的id和openId
* @param fuWuBusinessNoId
* @param dingYueBusinessNoId
* @param code
* @param scope
* @param userInfoPId
* @return
*/
@Override
public String loginToken(Long fuWuBusinessNoId,Long dingYueBusinessNoId ,String code,String scope,Long userInfoPId) {
UserInfo userInfo = weChatWebService.getAccessTokenByCode(fuWuBusinessNoId,dingYueBusinessNoId,code,scope,userInfoPId);
String token = setAppToken(userInfo.getId());
return token;
}
@Override
public String setAppToken(Long userId) {
String token = DecriptUtil.LoginEncrypt(userId+"");
stringRedisTemplate.opsForValue().set(CacheKey.APP_TOKEN + userId, token, 30, TimeUnit.DAYS);
return token;
}
@Override
public boolean checkAppToken(Long userId, String token) {
String appToken = stringRedisTemplate.opsForValue().get(CacheKey.APP_TOKEN + userId);
return !EmptyUtils.isEmpty(appToken) && appToken.equals(token);
}
3、需要拦截的url打入Token
@Token
/**
* 跳转到优惠券
* @return
*/
@Token
@GetMapping(value = "itemFilter",produces = "application/json")
@ResponseBody
@ApiOperation(value = "跳转到优惠券",notes = "跳转到优惠券",
consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE,
response = CouponItemGood.class)
@ApiImplicitParams({
@ApiImplicitParam(name = "userInfoId" ,value = "用户的id",dataTypeClass = Long.class,required = true,paramType = "query"),
@ApiImplicitParam(name = "timeDiff" ,value = "渠道的失效时间设置",dataTypeClass = Integer.class,paramType = "query")
})
public ResponseBean itemFilter(Long userInfoId,Integer timeDiff){
try {
return ResponseBean.buildSuccess (haoDaoKuService.itemFilter(WeChatMessageParams.HAO_DAN_KU_GAOYONG_APIKEY, userInfoId, timeDiff));
}catch (AppException e){
ExceptionLogUtils.log(e, this.getClass());
return ResponseBean.bu