首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何隐藏zkoss URL中显示的zul扩展?

如何隐藏zkoss URL中显示的zul扩展?
EN

Stack Overflow用户
提问于 2018-01-30 08:38:34
回答 1查看 825关注 0票数 0

我的问题是如何隐藏URL中显示的zul扩展名?

出于安全考虑,我们不想展示应用程序中使用的技术。

Url:

代码语言:javascript
复制
http://localhost:8080/warname/index.zul 

我想让网址看起来像这样:

代码语言:javascript
复制
http://localhost:8080/warname/index

代码语言:javascript
复制
http://localhost:8080/warname/

意味着index.zul或.zul需要隐藏在url中。

代码语言:javascript
复制
ZK Version: 8.0.0
Server: wildfly-8.2.1.Final
jdk: jdk1.8.0_51
Eclipse Version: Neon.2 Release (4.6.2)

web.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" id="WebApp_ID" version="2.4">
  <display-name>test4</display-name>
  <listener>
    <description>
        Used to cleanup when a session is destroyed</description>
    <display-name>ZK Session cleaner</display-name>
    <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class>
  </listener>
  <servlet>
    <description>
        The ZK loader for ZUML pages</description>
    <servlet-name>zkLoader</servlet-name>
    <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class>
    <init-param>
      <param-name>update-uri</param-name>
      <param-value>/zkau</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <description>
        The asynchronous update engine for ZK</description>
    <servlet-name>auEngine</servlet-name>
    <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>zkLoader</servlet-name>
    <url-pattern>*.zul</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>zkLoader</servlet-name>
    <url-pattern>*.zhtml</url-pattern>
  </servlet-mapping>
   <servlet-mapping>
    <servlet-name>auEngine</servlet-name>
    <url-pattern>/zkau/*</url-pattern>
  </servlet-mapping>

 <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>index.zul</welcome-file>
  </welcome-file-list>
</web-app>
EN

回答 1

Stack Overflow用户

发布于 2018-01-31 02:33:50

我只能遵循Bilbo Baggins的建议:

更改url模式

有很多种方法,这里只有几种.

  1. 在web.xml中指定欢迎文件列表(此处为示例)

如果URL中没有文件名,这将显示任何文件夹的index.zul。

  1. 使用HTTP服务器,例如结合使用Apache和重写
  2. 如果希望将内容保存在应用程序服务器中,Servlet提供了一个方法RequestDispatcher.forward(),可以在servlet过滤器或servlet中使用。

与此问题/回答类似,您也可以对zul文件执行相同的操作。

代码语言:javascript
复制
package your.package;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class NoZulForwardingFilter implements Filter {
    private static final String ZUL_VIEW_ROOT_PATH = "/pages";
    private static final String ZUL_VIEW_SUFFIX = ".zul";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpServletRequest = ((HttpServletRequest) request);
        String servletPath = httpServletRequest.getServletPath();
        //Only process the paths starting with /pages, so as other requests get unprocessed.
        //You can register the filter itself for /pages/* only, too
        if (servletPath.startsWith(ZUL_VIEW_ROOT_PATH)
                && !servletPath.contains(ZUL_VIEW_SUFFIX)) {
            request.getRequestDispatcher(servletPath.concat(ZUL_VIEW_SUFFIX))
                    .forward(request, response);
        } else {
            chain.doFilter(httpServletRequest, response);
        }
    }

    @Override
    public void destroy() { }
}

并在您的web.xml中配置它

代码语言:javascript
复制
<filter>
    <filter-name>nozulforwarding</filter-name>
    <filter-class>your.package.NoZulForwardingFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>nozulforwarding</filter-name>
    <url-pattern>/pages/*</url-pattern>
</filter-mapping>
  1. 最后,如果您不想在ZK应用程序中使用任何zul文件,您可以使用一种名为里奇莱特的java只方法。

注意:所有这些技术都不会隐藏您的应用程序是用ZK编写的,因为它总是下载包含ZK客户端API的特定JavaScript文件。这将使任何人都清楚您正在使用ZK,即使隐藏了URL的部分内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48517139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档