spring security URL拦截:Tomcat 7和Jboss Wildfly 8中的不同行为

时间:2013-12-09 13:03:37

标签: spring tomcat jboss spring-security

请查看我的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行添加到该网址 - 并且工作正常!

1 个答案:

答案 0 :(得分:2)

Tomcat和JBoss有自己的Servlet API实现(自定义)。

我猜想JBoss会对网址进行一些预处理,而不是/尝试解析/index.html。这是默认情况下(在JBoss中)并且基于web.xml中定义的欢迎文件列表(或默认情况下)。

我和JBoss合作已经有一段时间了,但也许你可以在某处配置这个处理。从历史上看,JBoss使用Tomcat作为提供者并定制了一些Tomcat使用的Valve(扩展/修改行为)。