2017-06-01 91 views
-1

我有一个Java Web应用程序,图像存储在一个文件夹中。阻止在Web应用程序中的文件的直接url访问

现在的问题是,用户能够访问URL如下图像。

http://localhost/Webapplication/images/image.jpg 

我想阻止驻留在Web应用程序的图像文件夹中的图像文件的直接URL访问。但是这些图像应该通过htlm页面显示。

我在JBoss应用程序服务器上运行,已经使用了这个方法,但最终使用的是.htaccess解决方案,这对我的Java应用程序没有帮助。 任何帮助将是一个非常赞赏。 感谢

+0

[没有的.htaccess工作的Apache-tomcat的(HTTPS的可能重复:// stackoverflow.com/questions/10528552/htaccess-not-working-apache-tomcat) – Raptor

+0

这些图像显示在html页面上吗? – Nurjan

+0

你可以考虑重定向吗? – harshavmb

回答

0
 
    - You just used AuthenticationFilter in you Application. 
    - AUTH_KEY is define LoginController to get userId 
    - @Secured is defined web.xml file for filter this path. 
    - @/Secured/temp/ is defined for image in my project directory. 
    - @/Secured/login.xhtml is defined after servlet configure initial it will login.xhtml redirect. 

按照娄代码:

import java.io.IOException; 
import javax.faces.application.ResourceHandler; 
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
import javax.servlet.annotation.WebFilter; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

/** 
* 
* @author Md. Amran Hossain 
*/ 
@WebFilter("/Secured/*") 
public class AuthenticationFilter implements Filter { 

    private FilterConfig config; 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     this.config = filterConfig; 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response,  FilterChain chain) throws IOException, ServletException { 
    if (((HttpServletRequest) request).getSession().getAttribute(LoginController.AUTH_KEY) == null 
      && !((HttpServletRequest) request).getRequestURI().endsWith("/Secured/login.xhtml") 
      && !((HttpServletRequest) request).getRequestURI().contains("/Secured/temp/") 
      && !((HttpServletRequest) request).getRequestURI().startsWith(((HttpServletRequest) request).getContextPath() + "/Secured" + ResourceHandler.RESOURCE_IDENTIFIER)) { 
     ((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/Secured/login.xhtml"); 
    } else { 
     chain.doFilter(request, response); 
    } 
} 

@Override 
public void destroy() { 
    this.config = null; 
} 
} 

把这个配置在web.xml中

<servlet-mapping> 
    <servlet-name>Faces Servlet</servlet-name> 
    <url-pattern>/Secured/*</url-pattern> 
</servlet-mapping>