2016-02-19 30 views
0

我正在使用JBOSS AS 7,并且我注意到一个奇怪的行为,涉及到servlet映射。为什么URL pattern/admin/*也匹配/ admin

我的web.xml:

<context-param> 
    <param-name>APPLICATION_NAME</param-name> 
    <param-value>scom</param-value> 
</context-param> 

<servlet> 
    <servlet-name>admin</servlet-name> 
    <servlet-class>com.afp.iris.sr.sco.scom.servlet.ScomIHMServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>admin</servlet-name> 
    <url-pattern>/admin/*</url-pattern> 
</servlet-mapping> 
<servlet> 
    <servlet-name>Resteasy</servlet-name> 
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class> 
    <init-param> 
     <param-name>resteasy.scan</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Resteasy</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
<filter-mapping> 
    <filter-name>IrisFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
<filter> 
    <filter-name>CAS Single Sign Out Filter</filter-name> 
    <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class> 
    <init-param> 
     <param-name>artifactParameterName</param-name> 
     <param-value>SAMLart</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>CAS Single Sign Out Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class> 
</listener> 

<filter> 
    <filter-name>CAS Authentication Filter</filter-name> 
    <filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class> 
    <init-param> 
     <param-name>casServerLoginUrl</param-name> 
     <param-value>${cas.server.url.login}</param-value> 
    </init-param> 
    <init-param> 
     <param-name>serverName</param-name> 
     <param-value>${COMPONENT_HOST_URL}</param-value> 
    </init-param> 
</filter> 

<filter-mapping> 
    <filter-name>CAS Authentication Filter</filter-name> 
    <url-pattern>/admin</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>CAS Validation Filter</filter-name> 
    <filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class> 
    <init-param> 
     <param-name>casServerUrlPrefix</param-name> 
     <param-value>${cas.server.url.prefix}</param-value> 
    </init-param> 
    <init-param> 
     <param-name>serverName</param-name> 
     <param-value>${COMPONENT_HOST_URL}</param-value> 
    </init-param> 
    <init-param> 
     <param-name>redirectAfterValidation</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>useSession</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>acceptAnyProxy</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>tolerance</param-name> 
     <param-value>${cas.tolerance}</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CAS Validation Filter</filter-name> 
    <url-pattern>/admin</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 
    <filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name> 
    <url-pattern>/admin</url-pattern> 
</filter-mapping> 

<filter> 
    <filter-name>CAS Assertion Thread Local Filter</filter-name> 
    <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>CAS Assertion Thread Local Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

当我用胶带将以下网址/admin我重定向到这是正常的CAS服务器,在那之后我重定向到ScomIHMServlet,并这是一部分,我错过了所有这些过程,/ admin与/ admin/*不匹配,所以这怎么能实现呢?对不起,很长的web.xml文件,我试图发布它的最重要的部分,任何建议将apreciated。

+0

所以你基本上问为什么'/ admin' URL匹配'/ admin/*'?为什么不应该呢? – BalusC

+0

嗯,我不知道这是如何工作,但我猜/管理员/ *不包括/管理 – NAIT

回答

0

您应该将/admin解释为一个文件夹。

如果它理论上是一个文件,那么它确实不匹配。

如果它是一个文件夹,那么您应该将实际URL解释为/admin/。当然这匹配/admin/*,因为*表示“零个或多个字符”。

+0

假设现在我磁带'/管理/'在我的网址将工作相同的/管理员(我的web.xml中的过滤器是否会将我重定向到CAS)? – NAIT

+0

重定向是一个特定于服务器的配置,通过servlet映射不能通过webapp控制,但任何理智的服务器(包括JBoss)在默认情况下都应该像这样。只是测试和发现。如果意外失败,请参阅服务器文档以了解详细信息。 – BalusC