pac4j-play SecureAction(扩展),类型不匹配

     2023-04-12     22

关键词:

【中文标题】pac4j-play SecureAction(扩展),类型不匹配【英文标题】:pac4j-play SecureAction (extension), type mismatch 【发布时间】:2020-01-31 07:14:50 【问题描述】:

我正在尝试扩展 pac4j-play 模块的 SecureAction,因为我想要验证一些额外的内容并将其添加到请求中,以便在控制器中轻松访问。

但我遇到了类型不匹配的编译问题,我似乎无法理解原因。

class SecureSiteAction[P<:CommonProfile, ContentType, R[X]>:AuthenticatedRequest[P, X]<:Request[X]](clients: String, authorizers: String, matchers: String, multiProfile: Boolean, parser: BodyParser[ContentType], playSessionStore: PlaySessionStore, config: Config)(implicit implicitExecutionContext: ExecutionContext)
  extends SecureAction[P, ContentType, R](clients, authorizers, matchers, multiProfile, parser, playSessionStore, config) 

  override def invokeBlock[A](request: Request[A], block: R[A] => Future[Result]): Future[Result] = 
    super.invokeBlock(request,  request: R[A] =>
      val site = Site(request.host)
      val profiles = request.asInstanceOf[AuthenticatedRequest[P, A]].profiles
      block(AuthenticatedSiteRequest(site, profiles, request))
    )
  


case class AuthenticatedSiteRequest[P<:CommonProfile, +A](site: Site, profiles: List[P], request: Request[A]) extends WrappedRequest[A](request)

我已经从原始 SecureAction 类中导入了 import scala.language.higherKinds 之类的内容(请参阅 https://github.com/pac4j/play-pac4j/blob/master/shared/src/main/scala/org/pac4j/play/scala/Security.scala)。

下面一行是问题:

block(AuthenticatedSiteRequest(site, profiles, request))

给出类型错误:

type mismatch;
[error]  found   : binders.AuthenticatedSiteRequest[P,A]
[error]  required: R[A]
[error]       block(AuthenticatedSiteRequest(site, profiles, request))

“有趣”的是,当我直接从 pac4j-play 的 SecureAction 案例类复制/粘贴源代码到我的 IDE 中时,我得到了完全相同的编译错误。

什么可以编译?它是 sbt 中的标志,还是我不知道的东西?

【问题讨论】:

【参考方案1】:

您需要更改下限类型以使用您的AuthenticatedSiteRequest,以便将一个类型参数固定到SecureSiteAction 类的给定参数P

class SecureSiteAction[
    P <: CommonProfile, ContentType,
    R[X] >: AuthenticatedSiteRequest[P, X] <: Request[X]
  ] //      ^^^^^^^^^^^^^^^^^^^^^^^^ 

“有趣”的是,当我直接从 pac4j-play 的 SecureAction 案例类复制/粘贴源代码到我的 IDE 中时,我得到完全相同的编译错误。

这似乎是您的 IDE 的问题,可能是 IntelliJ?

【讨论】:

我也试过了,还是不行。我的 IDE 和 SBT 都对该类型提出了投诉。 也许还有其他一些不明显的区别。尝试制作reprex

Kubernetes pod 自动扩缩与实例组自动扩缩不同步

】Kubernetespod自动扩缩与实例组自动扩缩不同步【英文标题】:KubernetespodautoscalingoutofsyncwithInstanceGroupautoscaling【发布时间】:2016-08-2419:33:41【问题描述】:我有一个简单的wordpress网站,由下面的ReplicationController和Service定义。应用... 查看详情

GKE 集群自动扩缩器与托管实例组中的自动扩缩器

】GKE集群自动扩缩器与托管实例组中的自动扩缩器【英文标题】:GKEclusterautoscalervsAutoscalinginManagedinstancegroups【发布时间】:2017-09-2014:32:51【问题描述】:我正在使用Google容器引擎。现在我想在我的集群中使用自动缩放功能。根... 查看详情

直扩通信基于matlab直扩通信系统信号捕获性能分析含matlab源码2205期

...码方式获取代码方式1:完整代码已上传我的资源:【直扩通信】基于matlab直扩通信系统信号捕获性能分析【含Matlab源码2205期】点击上面蓝色字体,直接付费下载,即可。获取代码方式2:付费专栏信号处理(Matlab)备注:点击上... 查看详情

华硕ac86u扩内存

参考技术AU盘1个,刷机固件。华硕ac86u扩内存:1、U盘1个,建议512MB以上(制作虚拟内存用).2、刷机固件:官改固件,梅林改版固件。 查看详情

scssyaml响应(扩展子列)(代码片段)

查看详情

Groovy 将元组/映射扩展为参数

】Groovy将元组/映射扩展为参数【英文标题】:Groovyexpandtuple/maptoarguments【发布时间】:2012-11-0702:56:51【问题描述】:是否可以将映射扩展为方法参数列表在Python中是可能的,例如。Expandingtuplesintoarguments我有一个defmap=[\'a\':1,\'b\':2... 查看详情

LESS 将伪类扩展为 !important

】LESS将伪类扩展为!important【英文标题】:LESSextendpseudoclassesas!important【发布时间】:2017-04-0419:40:06【问题描述】:我想将一些引导类扩展为!important。我就是这样做的:@import(less,reference)"bootstrap/less/bootstrap.less";.my-row.row!important;... 查看详情

如何在Python中将列表扩展为函数参数[重复]

】如何在Python中将列表扩展为函数参数[重复]【英文标题】:HowtoexpandalisttofunctionargumentsinPython[duplicate]【发布时间】:2011-12-0610:52:43【问题描述】:是否有语法允许您将列表扩展为函数调用的参数?例子:#Trivialexamplefunction,notmean... 查看详情

GKE 自动扩缩器“优化利用率”

】GKE自动扩缩器“优化利用率”【英文标题】:GKEautoscaler\'optimize-utilization\'【发布时间】:2020-09-2407:33:06【问题描述】:有没有人可以解释GKE自动扩缩器的“优化利用”设置与标准自动扩缩器有何不同。它声称在缩减规模方面... 查看详情

Python从父调用扩展子方法

】Python从父调用扩展子方法【英文标题】:Pythoncallingextendedchildmethodfromparent【发布时间】:2019-07-1820:28:27【问题描述】:我正在尝试调用父方法,然后是python中父类的扩展子方法。目标:创建一个继承父级的子方法。在Parent的ini... 查看详情

websocket 扩展位

】websocket扩展位【英文标题】:websocketextensionbits【发布时间】:2012-11-2223:47:43【问题描述】:我正在用Python编写一个websocket服务器实现,但我对扩展协商的工作原理有点迷茫。当然有Sec-WebSocket-Extensions标头可用于客户端请求扩... 查看详情

swiftswift-扩展为uitextfield加下划线(代码片段)

查看详情

将 _In_ 扩展为 const

】将_In_扩展为const【英文标题】:Expand_In_toconst【发布时间】:2014-11-1110:53:51【问题描述】:除了这个事实,它可能混淆那里的每个windowsc++开发人员,将_In_扩展为强制const(如果尚未存在)以确保const正确性不是谨慎的做法吗?... 查看详情

pyspark RDD 将一行扩展为多行

】pysparkRDD将一行扩展为多行【英文标题】:pysparkRDDexpandarowtomultiplerows【发布时间】:2017-05-0618:42:31【问题描述】:我在pyspark中有以下RDD,我相信这应该很简单,但一直无法弄清楚:information=[(10,\'sentencenumberone\'),(17,\'longersentence... 查看详情

为啥内部类的扩展会得到重复的外部类引用?

】为啥内部类的扩展会得到重复的外部类引用?【英文标题】:Whydoextensionsofinnerclassesgetduplicateouterclassreferences?为什么内部类的扩展会得到重复的外部类引用?【发布时间】:2013-12-3101:27:55【问题描述】:我有以下Java文件:classO... 查看详情

gparted在线扩分区大小

gparted在线扩分区空间(原数据不丢失)应用场景:如虚拟机上需要给linux系统增加分区,在vmware端增加大小后可在系统内通过gparted工具将原有分区大小扩容#apt-getinstallgparted#gparted (必须在图形界面)右击分区——resize——... 查看详情

使用通知扩展会导致 Cocoapods 出现问题

】使用通知扩展会导致Cocoapods出现问题【英文标题】:UsingaNotificationExtensioncausesissuewithCocoapods【发布时间】:2018-06-2818:39:18【问题描述】:我的应用中有一个通知扩展程序。但是,当我构建我的应用程序时,它与podFBSDKLoginKit冲... 查看详情

ECS Fargate 自动扩缩得更快?

】ECSFargate自动扩缩得更快?【英文标题】:ECSFargateautoscalingmorerapidly?【发布时间】:2021-07-2323:13:16【问题描述】:我正在对我的AutoScalingAWSECSFargate堆栈进行负载测试,其中包括:ApplicationLoadBalancer(ALB)的目标组指向ECS,ECS集群、... 查看详情