2013-12-09 49 views
0

请看看我的安全-config.xml中的一部分:春季安全网址拦截:不同行为的Tomcat 7和JBoss Wildfly 8

<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可以和at正常工作。这不应该依赖于Application Server,因为它完全与弹簧相关,并且两个应用程序都使用相同的弹簧。

更新 - 解决方案:基于@ M.Deinum的回答,我添加了一个名为/index.html的新url请求映射到我的主页,并且一个允许所有行到该url - 并且工作正常!

+0

我建议你打开日志并看看会发生什么。我的猜测是,在JBoss中'/'被重新映射为'/ index.jsp'。 JBoss有自己的容器,可能会以不同的方式处理URI。 –

+0

@ M.Deinum是的,你是对的 - JBoss出于我未知的原因试图找到/koko/index.html当我去/ koko /。你可以添加一个正确的答案,以便我可以接受它吗? – Serafeim

回答

2

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

我猜测JBoss会对URL做一些预处理,而不是/试图解决/index.html。这是默认情况下(在JBoss中)并基于web.xml中定义的欢迎文件列表(或某些默认值)。

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