请查看我的security-config.xml的一部分:
<http use-expressions="true">
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/home" access="permitAll" />
[other stuff here]
<intercept-url pattern="/**" access="denyAll" />
</http>
假设我的应用程序的上下文名称是koko
。
这在Tomcat中工作正常:当我访问http://tomcat-url:8080/koko/
或http://tomcat-url:8080/koko/home
时,我看到一个主页要求我登录 - 登录后我被重定向到http://tomcat-url:8080/koko/
我可以看到链接其他的东西。
当我尝试在JBoss中执行相同操作时,我访问http://jboss-url:8080/koko/
并立即获得登录页面!如果我访问http://jboss-url:8080/koko/home
我看到主页要求我登录。现在,在我登录后,我再次被重定向到http://jboss-url:8080/koko/
,我得到一个拒绝访问!如果我在登录后手动转到http://jboss-url:8080/koko/home
,我会看到其他员工,我能够正常导航。
所以问题似乎是JBoss不理解这一行
<intercept-url pattern="/" access="permitAll" />
或由后面的/**
行覆盖。然而,tomcats可以正常工作。这不应该依赖于Application Server,因为它完全与弹簧相关,并且两个应用程序都使用相同的弹簧。
更新 - 解决方案:根据@ M.Deinum的回答,我将一个名为/index.html的新网址请求映射添加到我的主页,并将permitAll行添加到该网址 - 并且工作正常!
答案 0 :(得分:2)
Tomcat和JBoss有自己的Servlet API实现(自定义)。
我猜想JBoss会对网址进行一些预处理,而不是/
尝试解析/index.html
。这是默认情况下(在JBoss中)并且基于web.xml中定义的欢迎文件列表(或默认情况下)。
我和JBoss合作已经有一段时间了,但也许你可以在某处配置这个处理。从历史上看,JBoss使用Tomcat作为提供者并定制了一些Tomcat使用的Valve
(扩展/修改行为)。