我的问题是如何隐藏URL中显示的zul扩展名?
出于安全考虑,我们不想展示应用程序中使用的技术。
Url:
http://localhost:8080/warname/index.zul 我想让网址看起来像这样:
http://localhost:8080/warname/index或
http://localhost:8080/warname/意味着index.zul或.zul需要隐藏在url中。
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
<?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>发布于 2018-01-31 02:33:50
我只能遵循Bilbo Baggins的建议:
更改url模式
有很多种方法,这里只有几种.
如果URL中没有文件名,这将显示任何文件夹的index.zul。
与此问题/回答类似,您也可以对zul文件执行相同的操作。
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中配置它
<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>注意:所有这些技术都不会隐藏您的应用程序是用ZK编写的,因为它总是下载包含ZK客户端API的特定JavaScript文件。这将使任何人都清楚您正在使用ZK,即使隐藏了URL的部分内容。
https://stackoverflow.com/questions/48517139
复制相似问题