关于oauth2.0 自定义返回格式内容

这里利用AOP进行拦截,主要拦截oauth2.0 postAccessToken 这里

@Slf4j
@Component
@Aspect
public class OauthTokenAspect {

    @Around("execution(* org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(..))")
    public Object handleControllerMethod(ProceedingJoinPoint joinPoint) throws Throwable {
        try {
            Object[] args = joinPoint.getArgs();
            Principal principal = (Principal) args[0];
            if (!(principal instanceof Authentication)) {
                throw new InsufficientAuthenticationException("未授权成功,请联系管理员");
            }
            Map<String, String> parameters = (Map<String, String>) args[1];
            String grantType = parameters.get(OAuth2Utils.GRANT_TYPE);
            Object proceed = joinPoint.proceed();
            ResponseEntity<OAuth2AccessToken> responseEntity = (ResponseEntity<OAuth2AccessToken>) proceed;
            OAuth2AccessToken body = responseEntity.getBody();
            Base baseUser = JsonUtils.toJavaObject(body.getAdditionalInformation().get(Constants.INFO), Base.class);
            if (Constants.AUTHORIZATION_CODE.equals(grantType)) {
                return proceed;
            } else {
                TokenVO tokenVO = new TokenVO();
                if (!Constants.CLIENT_CREDENTIALS.equals(grantType)) {
                    //加密
                    assert body != null;
                    byte[] b = DesUtils.encrypt(body.getValue().getBytes(), Constants.AES_SECRET);
                    String str = String.valueOf(b);
                    //token 加密携带用户信息存入redis
                    RedisUtils.set(**);
                    //token 加密信息存入redis
                    RedisUtils.set(**, 7200);
                    tokenVO.setAccessToken(str);
                } else {
                    //token 加密信息存入redis
                    RedisUtils.set(**, baseUser, 7200);
                    assert body != null;
                    tokenVO.setAccessToken(body.getValue());
                }
                tokenVO.setAccountName(baseUser.getAccountName());
                tokenVO.setExpiresIn(body.getExpiresIn());
                //主要在这里自定义返回内容
                return ResponseEntity
                        .status(HttpStatus.OK)
                        .body(R.success(tokenVO));
            }
        } catch (Throwable throwable) {
            throw new BusinessException("token 返回异常");
        }
    }
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值