2016-02-19 1 views
0

Я работаю с JBOSS AS 7, и я заметил странное поведение, относящееся к отображению сервлетов.Почему шаблон URL/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> 

Когда я записываю следующий URL /admin я получаю перенаправляется на сервер Cas, который является нормальным, после того, что я получаю перенаправлены ScomIHMServlet и это та часть, что я пропустить во всем этом процессе,/admin не соответствует/admin/*, так как это можно сделать? Извините за длинный файл web.xml и я попытался опубликовать наиболее важные его части, любое предложение было бы оценено.

+0

Итак, вы в основном спрашиваете, почему URL '/ admin' соответствует'/admin/* '? Почему бы и нет? – BalusC

+0

Ну, я не уверен, как это работает, но я угадываю/admin/* не включает/admin – NAIT

ответ

0

Вы должны интерпретировать /admin как папку.

Если бы это был теоретически файл, то он действительно не будет соответствовать.

Если это была папка, вы должны интерпретировать фактический URL как /admin/. Разумеется, это соответствует /admin/* как * означает «ноль или больше символов».

+0

Предположим, что теперь я использую '/ admin /' в моем URL-адресе, он будет работать так же, как '/ admin' (будут ли фильтры в моем web.xml перенаправлять меня на CAS)? – NAIT

+0

Редирект - это конфигурация, специфичная для сервера, которая не управляется с помощью webapp on путем сопоставления сервлетов, но любой здравомыслящий сервер (включая JBoss) должен по умолчанию вести себя так. Просто испытайте и откройте. При непредвиденном сбое обратитесь к документации по серверу. – BalusC