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
相关产品推荐
相关产品推荐

