You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CAS 6.6.15实现DelegatedClientAuthenticationHandler遇依赖导入问题

CAS 6.6.15 + pac4j 5.4.6:DelegatedClientAuthenticationHandler依赖问题解决

问题描述

我使用cas-overlay-template 6.6.15搭配pac4j 5.4.6,在实现DelegatedClientAuthenticationHandler类(该类继承AbstractPac4jAuthenticationHandler,此实现方式沿用自CAS 6.3.7.4版本)时遇到依赖问题:导入org.pac4j.core.context.JEEContext和org.pac4j.core.context.session.SessionStore时提示无法解析,但这两个类/接口实际存在。

相关代码:

import org.apereo.cas.authentication.AuthenticationHandlerExecutionResult;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.PreventedException;
import org.apereo.cas.authentication.principal.PrincipalFactory;
import org.apereo.cas.authentication.principal.Service;
import org.apereo.cas.authentication.principal.provision.DelegatedClientUserProfileProvisioner;
import org.apereo.cas.integration.pac4j.authentication.handler.support.AbstractPac4jAuthenticationHandler;
import org.apereo.cas.services.ServicesManager;
import org.pac4j.core.client.Clients;
import org.pac4j.core.context.session.SessionStore;
import org.pac4j.core.context.JEEContext;
import org.pac4j.core.context.session.SessionStore;

public class DelegatedClientAuthenticationHandler extends AbstractPac4jAuthenticationHandler {

    private final Clients clients;
    private final DelegatedClientUserProfileProvisioner profileProvisioner;
    private final SessionStore<JEEContext> sessionStore;

    protected DelegatedClientAuthenticationHandler(String name, ServicesManager servicesManager,
            PrincipalFactory principalFactory, Integer order, SessionStore sessionStore) {
        super(name, servicesManager, principalFactory, order, sessionStore);
        //TODO Auto-generated constructor stub
    }

    @Override
    protected AuthenticationHandlerExecutionResult doAuthentication(Credential credential, Service service)
            throws GeneralSecurityException, PreventedException {
        // TODO Auto-generated method stub
        throw new UnsupportedOperationException("Unimplemented method 'doAuthentication'");
    }
    
}

解决方案

1. 替换JEEContext为JakartaEEContext

在pac4j 5.x后期版本及CAS 6.6.x中,由于Java EE迁移到Jakarta EE,org.pac4j.core.context.JEEContext已被重命名为org.pac4j.core.context.JakartaEEContext,这是导致导入错误的核心原因——你沿用的CAS 6.3.7.4版本对应的pac4j版本还使用旧类名。

调整代码中的引用:

// 替换旧导入
import org.pac4j.core.context.JakartaEEContext;
import org.pac4j.core.context.session.SessionStore;

// 调整成员变量与构造方法参数类型
private final SessionStore<JakartaEEContext> sessionStore;

protected DelegatedClientAuthenticationHandler(String name, ServicesManager servicesManager,
        PrincipalFactory principalFactory, Integer order, SessionStore<JakartaEEContext> sessionStore) {
    super(name, servicesManager, principalFactory, order, sessionStore);
    // ...
}

2. 确认依赖配置

检查pom.xml中pac4j相关依赖是否正确引入,确保pac4j-core和pac4j-jee依赖不是provided范围(避免编译时无法解析类):

<dependency>
    <groupId>org.pac4j</groupId>
    <artifactId>pac4j-core</artifactId>
    <version>5.4.6</version>
</dependency>
<dependency>
    <groupId>org.pac4j</groupId>
    <artifactId>pac4j-jee</artifactId>
    <version>5.4.6</version>
</dependency>

3. 无需更换继承类

CAS 6.6.x中的AbstractPac4jAuthenticationHandler已适配pac4j 5.x的Jakarta EE变更,不需要更换继承类,只要保证构造方法参数与父类匹配即可。

内容的提问来源于stack exchange,提问作者DDL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:37:29