<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"-->
<!--"http://java.sun.com/dtd/web-app_2_3.dtd">-->
<web-app>

    <filter>
        <filter-name>parameterCheck</filter-name>
        <filter-class>net.cyan.arachne.exts.ParameterCheckFliter</filter-class>
        <async-supported>true</async-supported>
<!--        <init-param>-->
<!--            <param-name>Content-Security-Policy</param-name>-->
<!--            <param-value>default-src 'self' 'unsafe-inline' 'unsafe-eval';img-src * data:;default-src 'self' blob:; connect-src 'self' blob:</param-value>-->
<!--        </init-param>-->
<!--        <init-param>-->
<!--            <param-name>X-Frame-Options</param-name>-->
<!--            <param-value>SAMEORIGIN</param-value>-->
<!--        </init-param>-->
        <!--                <init-param>-->
        <!--                    <param-name>X-Content-Type-Options</param-name>-->
        <!--                    <param-value>nosniff</param-value>-->
        <!--                </init-param>-->
        <init-param>
            <param-name>Strict-Transport-Security</param-name>
            <param-value>max-age=10000</param-value>
        </init-param>
        <!--        <init-param>-->
        <!--            <param-name>X-XSS-Protection</param-name>-->
        <!--            <param-value>1</param-value>-->
        <!--        </init-param>-->
<!--        <init-param>-->
<!--            <param-name>P3P</param-name>-->
<!--            <param-value>CP=CAO PSA OUR</param-value>-->
<!--        </init-param>-->
    </filter>

    <filter>
        <filter-name>transform</filter-name>
        <filter-class>net.cyan.arachne.urltransform.UrlTransformFilter</filter-class>
        <async-supported>true</async-supported>
    </filter>


    <!--    <filter>-->
    <!--        <filter-name>cacheFilter</filter-name>-->
    <!--        <filter-class>com.gzzm.distributed.CacheFilter</filter-class>-->
    <!--        <init-param>-->
    <!--            <param-name>userIds</param-name>-->
    <!--            <param-value>70050427,70050423</param-value>-->
    <!--        </init-param>-->
    <!--    </filter>-->

    <!--<filter>-->
    <!--<filter-name>gb5</filter-name>-->
    <!--<filter-class>net.cyan.arachne.exts.Gb5Filter</filter-class>-->
    <!--<init-param>-->
    <!--<param-name>mapper</param-name>-->
    <!--<param-value>com.gzzm.portal.cms.commons.CmsGb5DomainMap</param-value>-->
    <!--</init-param>-->
    <!--</filter>-->

    <filter>
        <filter-name>accesslog</filter-name>
        <filter-class>com.gzzm.platform.log.AccessLogFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>192.168.1.100</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>auth</filter-name>
        <filter-class>com.gzzm.platform.login.AuthorityFilter</filter-class>
        <async-supported>true</async-supported>
    </filter>

    <filter>
        <filter-name>urlrewrite</filter-name>
        <filter-class>net.cyan.arachne.urlrewrite.UrlRewriteFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>default-no-transform</param-name>
            <param-value>false</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>auth0</filter-name>
        <filter-class>com.gzzm.platform.login.AuthorityFilter0</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>ips</param-name>
            <param-value>19.193.13.100</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>transform</filter-name>
        <url-pattern>/xx/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>parameterCheck</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <!--    <filter-mapping>-->
    <!--        <filter-name>cacheFilter</filter-name>-->
    <!--        <url-pattern>/*</url-pattern>-->
    <!--        <dispatcher>REQUEST</dispatcher>-->
    <!--    </filter-mapping>-->

    <!--<filter-mapping>-->
    <!--<filter-name>gb5</filter-name>-->
    <!--<url-pattern>/*</url-pattern>-->
    <!--<dispatcher>REQUEST</dispatcher>-->
    <!--</filter-mapping>-->

    <filter-mapping>
        <filter-name>accesslog</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>auth</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>urlrewrite</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

    <filter-mapping>
        <filter-name>auth0</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>


    <servlet>
        <servlet-name>LobsterRunStreamServlet</servlet-name>
        <servlet-class>com.gzzm.lobster.api.RunStreamServlet</servlet-class>
        <async-supported>true</async-supported>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>LobsterRunStreamServlet</servlet-name>
        <url-pattern>/ai/api/runs/stream</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>LobsterBootstrapServlet</servlet-name>
        <servlet-class>com.gzzm.lobster.bootstrap.BootstrapServlet</servlet-class>
        <load-on-startup>99</load-on-startup>
    </servlet>

    <!--
    知识库 mock / KB Mock servlet — 仅用于本地端到端测试.
    把 lobster.xml 的 <oaKnowledgeBaseUrl> 指到 http://<host>:<port>/ai/api/_mock/kb 即可启用.
    生产环境无需删除——只要 oaKnowledgeBaseUrl 指向真实 KB，mock 端点形同虚设；
    但若担心未授权访问，可在反向代理层屏蔽 /ai/api/_mock/* 路径.
-->
    <servlet>
        <servlet-name>LobsterKbMockServlet</servlet-name>
        <servlet-class>com.gzzm.lobster.api.KbMockServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>LobsterKbMockServlet</servlet-name>
        <url-pattern>/ai/api/_mock/kb/*</url-pattern>
    </servlet-mapping>


    <servlet>
        <servlet-name>arachne-comet</servlet-name>
        <servlet-class>net.cyan.arachne.comet.Jetty8WebSocketCometServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>arachne</servlet-name>
        <servlet-class>net.cyan.arachne.PageServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>forward</servlet-name>
        <servlet-class>net.cyan.arachne.ForwardServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>script</servlet-name>
        <servlet-class>net.cyan.arachne.ScriptServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>remotecall</servlet-name>
        <servlet-class>net.cyan.nest.remote.RemoteCallServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>captcha</servlet-name>
        <servlet-class>net.cyan.captcha.CaptchaServlet</servlet-class>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>charset</servlet-name>
        <servlet-class>net.cyan.arachne.exts.CharsetServlet</servlet-class>
        <init-param>
            <param-name>max-age</param-name>
            <param-value>10</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>weixin</servlet-name>
        <servlet-class>net.cyan.weixin.WeiXinServlet</servlet-class>
        <init-param>
            <param-name>token</param-name>
            <param-value>zhengmeng</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>arachne-comet</servlet-name>
        <url-pattern>*.comet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>arachne</servlet-name>
        <url-pattern>*.page</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>forward</servlet-name>
        <url-pattern>*.ptl</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>script</servlet-name>
        <url-pattern>*.bsh</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>script</servlet-name>
        <url-pattern>*.mvel</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>script</servlet-name>
        <url-pattern>*.script</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>script</servlet-name>
        <url-pattern>*.javascript</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>script</servlet-name>
        <url-pattern>*.groovy</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>remotecall</servlet-name>
        <url-pattern>/remotecall</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>captcha</servlet-name>
        <url-pattern>/captcha</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>charset</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>charset</servlet-name>
        <url-pattern>*.css</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>weixin</servlet-name>
        <url-pattern>/weixin</url-pattern>
    </servlet-mapping>

    <session-config>
        <session-timeout>600</session-timeout>
    </session-config>

    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>

    <!--<icon>-->
    <!--<small-icon>/favicon.ico</small-icon>-->
    <!--<large-icon>/favicon.ico</large-icon>-->
    <!--</icon>-->

    <error-page>
        <error-code>400</error-code>
        <location>/400.jsp</location>
    </error-page>

    <error-page>
        <error-code>401</error-code>
        <location>/401.jsp</location>
    </error-page>

    <error-page>
        <error-code>403</error-code>
        <location>/403.jsp</location>
    </error-page>

    <error-page>
        <error-code>404</error-code>
        <location>/404.jsp</location>
    </error-page>

    <error-page>
        <error-code>405</error-code>
        <location>/405.jsp</location>
    </error-page>

    <error-page>
        <error-code>500</error-code>
        <location>/500.jsp</location>
    </error-page>

</web-app>
