自定义拦截器 , Spring AOP , Spring IOC的使用

自定义验证登录拦截器 :

步骤 1 : 

@Aspect
@Component
@Order(1) // 代表执行的顺序 , 数字越小 , 越先执行
public class TokenInterceptor {
    public static final String AUTHORIZATION = "Authorization";

    public static final String APP_TOKEN = "App-Token";

    @Value("${token.check.url}")
    protected String checkTokenUrl;

    @Value("${module.code}")
    protected String moduleCode;

    @Autowired
    private NucRestTemplate nucRestTemplate;

    @Pointcut("@annotation(com.cmft.cmuop.api.annotation.ValidateToken)")
    public void annotationPointcut() {
    }

    @Before("annotationPointcut()")
    public void refreshRedis(JoinPoint joinPoint) throws Throwable {
        HttpServletRequest request = AppPlatformContext.getCurrentRequest();
        String tokenString = this.getTokenString(request);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.add("ip", HttpUtils.getReqIp(request));
        headers.add("App-Token", tokenString);
        headers.add("CallerModule", moduleCode);
        Map<String, Object> params = new HashMap<>();
        params.put("moduleCode", moduleCode);
        HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params, headers);
        ResponseEntity<JSONObject> responseEntity = nucRestTemplate
                .postForEntity(String.format("%s%s", checkTokenUrl, tokenString), httpEntity, JSONObject.class);
        JSONObject checkTokenResult = responseEntity.getBody();
        if(!checkTokenResult.getBooleanValue("state")) {
            throw new BusinessException(401, "Unauthorized");
        }
        this.loadUsersResourcesByModule(checkTokenResult, request);
    }

    private void loadUsersResourcesByModule(JSONObject checkTokenResult, HttpServletRequest request) {
        JSONObject dataJsonObject = checkTokenResult.getJSONObject("data");
        request.setAttribute(AppPlatformContext.CURRENT_ACCOUNT_ID, dataJsonObject.getString("accountId"));
    }

    private String getTokenString(HttpServletRequest request) {
        String tokenString = request.getHeader(APP_TOKEN);
        if (StringUtils.isEmpty(tokenString)) {
            tokenString = request.getHeader(AUTHORIZATION);
        }
        return tokenString;
    }
}

步骤 2 : 

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface ValidateToken {

}

步骤 3 : 在方法中使用

@PostMapping(value = "interface")
@ApiOperation("通用接口")
@ValidateToken // 自己定义的注解
public WebResponse<?> configInterface(@RequestBody @Validated ThirdSystemRequestDTO thirdSystemDTO,
                                          HttpServletRequest request) {

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值