Java 自定义SPNEGAuthenticator与Tomcat 8配合使用,但与Tomcat 9配合使用时给出404

Java 自定义SPNEGAuthenticator与Tomcat 8配合使用,但与Tomcat 9配合使用时给出404,java,tomcat,forms-authentication,tomcat9,spnego,Java,Tomcat,Forms Authentication,Tomcat9,Spnego,该项目是使用表单验证与Jetty一起开发的。文件login.jsp 在生产中,它发布在Tomcat 8.0.53中,并使用定制的SPNEGAuthenticator。文件conf/context.xml 文件tomcat/application/WEB-INF/WEB.xml包括以下内容: 斯普尼戈 实名 /login.jsp /loginError.jsp 在文件CustomeSpnegoAuthenticator.java中,FormAuthenticator的初始化和设置如下

该项目是使用表单验证与Jetty一起开发的。文件
login.jsp


在生产中,它发布在Tomcat 8.0.53中,并使用定制的
SPNEGAuthenticator
。文件
conf/context.xml


文件
tomcat/application/WEB-INF/WEB.xml
包括以下内容:


斯普尼戈
实名
/login.jsp
/loginError.jsp
在文件
CustomeSpnegoAuthenticator.java
中,FormAuthenticator的初始化和设置如下

公共类CustomeSpnegoAuthenticator扩展org.apache.catalina.authenticator.SpnegoAuthenticator{
private FormAuthenticator FormAuthenticator=新FormAuthenticator();
@凌驾
公共容器(容器){
试一试{
super.setContainer(container);
formAuthenticator.setContainer(容器);
formAuthenticator.setLandingPage(“/home”);
formAuthenticator.start();
log.info(“formAuthenticator状态:+formAuthenticator.getState())
}捕获(生命周期异常){
log.error(“启动身份验证程序失败,原因:+ex.getMessage(),ex”);
}
}
@凌驾
受保护的字符串getAuthMethod(){
返回常量.SPNEGO_方法;
}
@凌驾
公共布尔身份验证(请求、HttpServletResponse响应)引发IOException{
//进程用户名和密码
//返回结果
}
}
这在Tomcat8中运行良好,身份验证发生在
localhost/application/j\u security\u check
上。但是在Tomcat 9.0.20中部署它之后,它开始向
localhost/application/j_security\u check
提供404,尽管在
CustomeSpnegoAuthenticator.java
formAuthenticator的状态是
started
conf/context.xml
conf/web.xml
webapps/application/web-INF/web.xml
都是相同的。只有Tomcat版本不同


有人知道原因是什么,或者我如何进一步调试吗?

所以在阅读源代码后,我发现Tomcat 9中的身份验证程序的实现与Tomcat 8有点不同。他们将
authenticate
替换为
doAuthenticate


因此,解决方案位于文件
CustomeSpnegoAuthenticator.java
,将覆盖函数从
authenticate
更改为
doAuthenticate
。由于这一行:
formAuthenticator.setLandingPage(“/home”)。在文件
login.jsp
中,操作应该是
home/j_security_check

,因此在阅读源代码后,我发现Tomcat 9中的验证器实现与Tomcat 8有点不同。他们将
authenticate
替换为
doAuthenticate


因此,解决方案位于文件
CustomeSpnegoAuthenticator.java
,将覆盖函数从
authenticate
更改为
doAuthenticate
。由于这一行:
formAuthenticator.setLandingPage(“/home”)。在文件
login.jsp
中,操作应该是
home/j_security_check

我在这里没有看到任何涉及的SPNEGO。我在这里没有看到任何涉及的SPNEGO。