我应该使用 HttpServletRequest.getParameter() 还是 HttpServletRequest.setAttribute() 在组件之间传递数据?

问题描述 投票:0回答:1

我想根据令牌端点请求中发送的授权代码自定义访问令牌。

我按照 Spring Boot Oauth2 文档执行此操作。令牌自定义

具体来说,我正在使用 OAuth2TokenCustomizer 自定义访问令牌,并且需要访问作为 /token 端点调用的一部分发送的授权代码。

情况是这样的

当前实现:最简单的方法(从请求参数获取)

将 HttpServletRequest 注入 CustomTokenGenerator 类并从请求参数中访问授权代码,如下所述

@Component
@RequiredArgsConstructor
public class TokenCustomizer implements OAuth2TokenCustomizer<JwtEncodingContext> {

    private final HttpServletRequest httpServletRequest;

    @Override
    public void customize(JwtEncodingContext context) {
      if (OAuth2TokenType.ACCESS_TOKEN.equals(context.getTokenType())) {
          // get it from parameter
          String authorizationCode = httpServletRequest.getParameter("code");
          if (authorizationCode != null) {
            context.getClaims().claim("userName", "John Doe");
        }

       }
        
    }
}

其他方法(自定义请求过滤器实现)

创建自定义的OnceperRequestFilter,并获取请求参数并将其设置为属性“authCode”

然后在 TokenCustomizer 中,代替 getParameter() 使用 getAttribute()

我的问题:

  1. 哪种方法更符合 Spring Security 或 Java EE 中的最佳实践? (主要是关于参数和属性)
  2. 使用属性与参数是否存在性能或架构权衡?
  3. 是否有官方参考资料或指南可以证明一种方法优于另一种方法?

任何建议、参考资料或示例将不胜感激!

spring-boot servlets spring-security-oauth2 spring-authorization-server
1个回答
0
投票
  1. 哪种方法更符合 Spring 的最佳实践 安全还是 Java EE? (主要是关于参数和属性)

使用自定义声明键值对https://docs.spring.io/spring-authorization-server/reference/guides/how-to-custom-claims-authorities.html#custom-claims。它喜欢你所说的

attribute
.

  1. 使用时是否有任何性能或架构权衡 属性与参数?

官方没有关于参数使用的文档,无需在这里考虑权衡。

  1. 是否有官方参考资料或指南可以证明这一点的合理性 接近另一个?

没有关于使用参数的官方文档。使用这种方法https://docs.spring.io/spring-authorization-server/reference/guides/how-to-custom-claims-authorities.html#custom-claims

© www.soinside.com 2019 - 2024. All rights reserved.